windows服務啟動有界面的程序


大家寫windows服務守護進程的時候,肯定會遇到啟動的程序看不到界面,只能在任務管理器里面看到xxx.exe問題.

發現可能有如下情況

a.無論是開機,還是程序被關掉后,守護服務啟動的程序只能看到任務管理器exe的進程,看不到界面;

b.開機后,守護服務自動啟動程序,只能看到進程里面有exe進程,看不到界面,但是殺掉進程重啟后,能看到界面;


我來給出解決方法:
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設置.

以上很簡單的兩點,我是測試過好多次了.發現是這個規律的時候,我不會告訴我你,我是多么的興奮.[當時我在本地的機器上,着確實是成功了的]

有人寫了代碼后,可能認為不需要用第二點中增加自動登錄的用戶,那可能是本機只有一個用戶造成的(沒有測試,推測).
需要這種守護進程的電腦,一般都是服務器,而服務器一般都是遠程操作.而且客戶一般不會給你administrator賬戶,而是給你一個其他的賬戶.
(一般客戶只看程序的界面,不會去查看進程,所以,沒有界面,他就覺得程序沒有啟動.)
所以上面這種情況,是萬惡的客戶逼我做出來的,然后是我苦逼的做了各種實驗得到的結果.

別忘記點贊.

 

==========================

補充:

上面的問題解決方法有時候在某些機器上不行.不過在本機確實是測試通過的,然后在服務器上設置后,依然不行.

又給出一種新的解決方法:在服務器安裝vnc服務端.(大家覺得很奇怪吧,不過這方法真的可行).

注意:VNC不可用remote安裝的哦,必須插上顯示器,鼠標鍵盤,親自登陸到機器上安裝.

 

========================

以下為其他網友的解決方法,沒有驗證過.你可以嘗試

http://www.cnblogs.com/qfb620/archive/2009/08/05/1539557.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM