以下是创建进程的代码
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帐户运行。谢谢!
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帐户运行。谢谢!
char pDesktop[]="WinSta\\Default";
应该是:
char pDesktop[]="WinSta0\\Default";
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003APR.1033/security/security/starting_an_interactive_client_process.htm