我有一個在「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