以下是创建进程的代码
         STARTUPINFO si;
memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
char pDesktop[1] = "";
si.lpDesktop = pDesktop;
si.dwFlags = STARTF_FORCEOFFFEEDBACK | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_NORMAL; PROCESS_INFORMATION pi; CString strCurDir(szFullPathName);
strCurDir = strCurDir.Mid(0, strCurDir.ReverseFind('\\') );
CreateProcess(
szFullPathName,
NULL,
NULL, // SD
NULL,  // SD
FALSE, 
                  CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_PROCESS_GROUP | NORMAL_PRIORITY_CLASS, // creation flags
NULL,               // new environment block
strCurDir,          // current directory name
&si,
&pi // process information
);
代码在windows窗口进程和Console程序中都可以成功创建进程,并且正确显示所创建进程的窗口。但是在serice进程中,能够成功创建,但是所创建进程的窗口没有显示。service是不与桌面交互的,使用LocalSystem帐户运行。谢谢!

解决方案 »

  1.   

    使用CreateProcessWithTokenW或CreateProcessWithLogonW或CreateProcessAsUser,更多内容参考MSDN。
      

  2.   

    设置
    char pDesktop[]="WinSta\\Default"; 
      

  3.   

    上打错了面
    应该是:
    char pDesktop[]="WinSta0\\Default"; 
      

  4.   

    看看MSDN中的示例代码Starting an Interactive Client Process
    ms-help://MS.VSCC.2003/MS.MSDNQTR.2003APR.1033/security/security/starting_an_interactive_client_process.htm