你們寫windows服務守護進程的時候,確定會遇到啓動的程序看不到界面,只能在任務管理器裏面看到xxx.exe問題.html
發現可能有以下狀況windows
a.不管是開機,仍是程序被關掉後,守護服務啓動的程序只能看到任務管理器exe的進程,看不到界面;服務器
b.開機後,守護服務自動啓動程序,只能看到進程裏面有exe進程,看不到界面,可是殺掉進程重啓後,能看到界面;app
我來給出解決方法:
1.服務中的啓動程序代碼用以下方法:測試
string appStartPath = @"C:\Test.exe"; IntPtr userTokenHandle = IntPtr.Zero; ApiDefinitions.WTSQueryUserToken(ApiDefinitions.WTSGetActiveConsoleSessionId(), ref userTokenHandle); ApiDefinitions.PROCESS_INFORMATION procInfo = new ApiDefinitions.PROCESS_INFORMATION(); ApiDefinitions.STARTUPINFO startInfo = new ApiDefinitions.STARTUPINFO(); startInfo.cb = (uint)Marshal.SizeOf(startInfo); ApiDefinitions.CreateProcessAsUser( userTokenHandle, appStartPath, "", IntPtr.Zero, IntPtr.Zero, false, 0, IntPtr.Zero, null, ref startInfo, out procInfo); if (userTokenHandle != IntPtr.Zero) ApiDefinitions.CloseHandle(userTokenHandle);
須要下載Cjwdev.WindowsApi.dll,不少資源,本身baidu去下載
2.必需要有一個開機不輸入密碼就能夠登陸的用戶,使用命令control userpasswords2設置.ui
以上很簡單的兩點,我是測試過好屢次了.發現是這個規律的時候,我不會告訴我你,我是多麼的興奮.[當時我在本地的機器上,着確實是成功了的]spa
有人寫了代碼後,可能認爲不須要用第二點中增長自動登陸的用戶,那多是本機只有一個用戶形成的(沒有測試,推測).
須要這種守護進程的電腦,通常都是服務器,而服務器通常都是遠程操做.並且客戶通常不會給你administrator帳戶,而是給你一個其餘的帳戶.
(通常客戶只看程序的界面,不會去查看進程,因此,沒有界面,他就以爲程序沒有啓動.)
因此上面這種狀況,是萬惡的客戶逼我作出來的,而後是我苦逼的作了各類實驗獲得的結果.htm
別忘記點贊.blog
==========================進程
補充:
上面的問題解決方法有時候在某些機器上不行.不過在本機確實是測試經過的,而後在服務器上設置後,依然不行.
又給出一種新的解決方法:在服務器安裝vnc服務端.(你們以爲很奇怪吧,不過這方法真的可行).
注意:VNC不可用remote安裝的哦,必須插上顯示器,鼠標鍵盤,親自登錄到機器上安裝.
========================
如下爲其餘網友的解決方法,沒有驗證過.你能夠嘗試
http://www.cnblogs.com/qfb620/archive/2009/08/05/1539557.html