我有一个在“SYSTEM”帐户下运行的windows服务,它检查每个登录用户是否运行特定的应用程序。如果应用程序没有运行,服务将启动它(在相应的用户名下)。
我试图用CreateProcessAsUser()完成我的目标。该服务确实在相应的用户名下启动应用程序,但未绘制GUI。 (是的,我确保启用“允许服务与桌面交互”复选框)。CreateProcessAsUser不绘制GUI
系统:XP SP3,语言:C#
下面是一些代码,您可能会感兴趣:
PROCESS_INFORMATION processInfo = new PROCESS_INFORMATION();
startInfo.cb = Marshal.SizeOf(startInfo);
startInfo.lpDesktop = "winsta0\\default";
bResult = Win32.CreateProcessAsUser(hToken, null, strCommand, IntPtr.Zero, IntPtr.Zero, false, 0, IntPtr.Zero, null, ref startInfo, out processInfo);
据我了解,设置startInfo.lpDesktop = “winsta0 \默认”;应该使用了相应用户的桌面。
即使与此处所述的内容相反:http://support.microsoft.com/kb/165194,我尝试将lpDesktop设置为null,或者根本不设置它,两者都给出相同的结果:进程是以预期用户的名义启动的,我可以看到窗口标题的一部分酒吧。 “不可见”窗口拦截鼠标点击事件,按预期处理它们。它只是不吸引自己。
是否有人熟悉这样的问题,并知道我做错了什么?
我面临同样的问题,您是否能够找到解决方案? – 2011-01-30 21:55:30