windows服務啓動有界面的程序

你們寫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

相關文章
相關標籤/搜索