摘自:http://topic.csdn.net/t/20030117/19/1369782.html
我建立了一个Service Application,中间有一个Thread,在一定条件下,我需要它运行另一个外部的程序。
可以当我启动服务,外部程序并没有~~显示~~的运行:在任务管理器中可以看到,但桌面上看不到显示。
我试了CreateProcess, ShellExecute, 和WinExec都不行。
我发现在Server里调用的Process是System用户,所以我用CreateProcessAsUser,切换到当前用户,但还是没有窗口显示。
在CreateProcessAsUser中,有一个lpDesktop参数,若不指定,则继承父进程的lpDesktop,而父进程是以System登陆的。我想问题应该就出在这里。但如何才能得到当前正在使用的用户的lpDesktop呢?
----------------------
DWORD dwLogonFlags=LOGON_WITH_PROFILE;/*LOGON_NETCREDENTIALS_ONLY;//LOGON_NETCREDENTIALS_ONLY*/
DWORD dwCreationFlags = CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP;
STARTUPINFOW si2;
ZeroMemory(&si2, sizeof(STARTUPINFOW));
si2.cb = sizeof(STARTUPINFOW);
si2.lpDesktop = L "winsta0\\default ";
PROCESS_INFORMATION pi2;
ZeroMemory(&pi2,sizeof(PROCESS_INFORMATION));
wchar_t* commandline=L "c:\\progra~1\\aaa\\bbb\\test ";
BOOL bres2=CreateProcessWithLogonW(L "masterz ",L " ",L "*** ",
dwLogonFlags,NULL,commandline,dwCreationFlags,NULL,
L "c:\\progra~1\\aaa\\bbb ",
&si2,&pi2);
if(bres2)
{
OutputDebugString( "CreateProcessWithLogonW succeeded ");
CloseHandle(pi2.hThread);
CloseHandle(pi2.hProcess);
}
没有评论:
发表评论