shell(nil,pchar(shellstr),false,DEBUG_PROCESS or DEBUG_ONLY_THIS_PROCESS ,pPROCESSret(@myprocess))
//------------------------------
function shell(path:pansichar;cmd:pansichar;bInheritHandles:bool;dwCreationFlags:DWORD;process:Pprocessret):bool; 
var
   suInfo:STARTUPINFO;
   lpProcessInformation:PROCESS_INFORMATION;
begin
   result:=false;
   GetStartupInfo(suInfo);
   if CreateProcess(path,cmd,nil,nil,fasle,dwCreationFlags,nil,nil,suInfo,lpProcessInformation) then
   ......这里使用 CreateProcess 创建进程,进程能成功创建~但是如果dwCreationFlags=(DEBUG_PROCESS or DEBUG_ONLY_THIS_PROCESS )参数创建进程后,进程窗口不显示,只在任务管理器里出现该进程~~~CPU占用为0,内存占用为 50~60K~~~如果dwCreationFlags=0则可以正常启动...忘大侠赐教!!

解决方案 »

  1.   

    CreatProcess 
    声明 
      BOOL CreateProcess(
        LPCTSTR  lpApplicationName, // 要执行的应用程序的名字。
        LPTSTR  lpCommandLine, // 要执行的命令行
        LPSECURITY_ATTRIBUTES  lpProcessAttributes, // pointer to process security attributes 
        LPSECURITY_ATTRIBUTES  lpThreadAttributes, // pointer to thread security attributes 
        BOOL  bInheritHandles, // handle inheritance flag 
        DWORD  dwCreationFlags, // creation flags 
        LPVOID  lpEnvironment, // pointer to new environment block 
        LPCTSTR  lpCurrentDirectory, // pointer to current directory name 
        LPSTARTUPINFO  lpStartupInfo, // pointer to STARTUPINFO 
        LPPROCESS_INFORMATION  lpProcessInformation // pointer to PROCESS_INFORMATION  
       );
     
    说明 
      创建一个新进程 
    返回值 
      Long,非零表示成功,零表示失败。
      会设置GetLastError 
    参数表 
    参数 类型及说明 
      lpApplicationName String,要执行的应用程序的名字。可设为vbNullString;
        在这种情况下,应用程序的名字应在lpCommandLine参数的起始处出现
      lpCommandLine String,要执行的命令行。可用GetCommandLine函数取得一个进程使用的命令行。
        windows会尽可能地根据下述搜索顺序来查找执行文件: 
    (1)包含了父进程执行文件的目录 
    (2)父进程当前的目录 
    (3)由GetSystemDirectory返回的系统目录 
    (4)仅适于windows NT:16位系统目录 
    (5)由GetSystemDirectory返回的windows目录 
    (6)由PATH环境变量指定的目录 
      lpProcessAttributes SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,
         或传递零值表示采用不允许继承的默认描述符。该参数定义进程的安全特性 
      lpThreadAttributes SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,
         或传递零值表示采用不允许继承的默认描述符。该参数定义进程之主进程的安全特性 
      bInheritHandles Long,TRUE表示允许当前进程中的所有句柄都由新建的子进程继承 
      dwCreationFlags Long,来自API32.TXT文件的一个或多个下述常数之一,
         它们都带有前缀CREATE_。下面这些用于VB程序员: 
      CREATE_SEPARATE_WOW_VDM(仅适用于NT):启动一个16位的windows应用程序时,
         强迫它在自己的内存空间运行  
      CREATE_SHARED_WOW_VDM(仅适用于NT):启动一个16位的windows应用程序时,
         强迫它在共享的16位虚拟机内运行 
      CREATE_SUSPENDED:立即挂起新进程。除非调用ResumeThread函数。 
      IDLE_PRIORITY_CLASS:新进程应该有非常低的优先级,
         只有在系统空闲的时候才能运行。基本值是4 
      HIGH_PRIORITY_CLASS:新进程应该有非常高的优先级,基本值是13 
      NORMAL_PRIORITY_CLASS:标准优先级。如进程位于前台,则基本值是9;
         如在后台。则优先值是7 
      lpEnvironment 任何类型,指向一个环境块的指针 
      lpCurrentDriectory String,新进程的当前目录路径 
      lpStartupInfo STARTUPINFO,指定一个STARTUPINFO结构,
         其中包含了创建进程时使用的附加信息 
      lpProcessInformation PROCESS_INFORMATION,该结构用于容纳新进程的进程和线程标识。
         大多数情况下,一旦这个函数返回,父应用程序都会关闭两个句柄。 
    ExitProcess 
    说明
      ExitProcess 函数 结束一个进程和所有进程打开的线程
    声明 
      VOID ExitProcess(
        UINT  uExitCode // exit code for all threads  
       );
     
    说明 
      中止一个进程 
      在Delphi中使用 ,应尽量避免用该函数来关闭进程。
      不要在自己的程序中使用它。此时,
      应试着向要关闭的那个程序的主窗口投递一条WM_CLOSE消息 
    参数表 
    参数 类型及说明 
    uExitCode Long,指定想中断的那个程序的一个退出代码 
      

  2.   

    CloseHandle(lpProcessInformation.hThread);
                   CloseHandle(lpProcessInformation.hProcess);楼上的写的很清楚了哦。。