程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 將任意程序以Windows服務啟動

將任意程序以Windows服務啟動

編輯:C#入門知識

公司服務器在每天啟動時,並沒有登錄系統,因此想要運行特定的程序,只有把它作為Windows服務啟動

要求不修改原來的程序,但是又需要與SCM(服務控制管理器)通信,需要另建一個windows服務程序,讓其調用我們的目標程序

網上一些所謂可以把exe注冊為服務的工具(如srvinstw.exe, instsrv.exe, srvany.exe等)實際並沒有效果,或者說只對本身具有與SCM通信功能的程序有作用

 

以下為C#的windows服務實現

在ServiceBase的派生類中實現虛函數OnStart和OnStop即可

       
                     EventLog log =            Thread thread =            Process proc =            exePath =   
                        log.Source = ; 
              dir =             ExeConfigurationFileMap map =              map.ExeConfigFilename = dir + ; 
             Configuration config =             exePath = config.AppSettings.Settings[].Value; 
   
            OnStart(              
                   (thread ==                       thread =  Thread(startExe); 
                      
                         
                   (proc !=  && !                      proc.Kill(); 
                   (thread !=  && thread.ThreadState ==                      thread.Abort(); 
                     
                        
                  proc =                  ProcessStartInfo startInfo =  ProcessStartInfo(exePath); 
                 proc.StartInfo =                     }

1.啟動目標程序時候需要使用新線程,如果在service線程中啟動,會阻塞服務與SCM的通信,造成服務啟動失敗

2.OnStart和OnStop中所有可能拋出的異常都需要捕獲,否則啟動時如果有異常,則會提示服務啟動又停止了

3.啟動的目標程序只能以SYSTEM賬戶運行,因此看不到程序界面

4.服務程序也可使用C++實現,同樣最少實現OnStart和OnStop兩個虛函數即可

 

服務的安裝,兩個辦法:

1.編寫安裝/卸載程序,調用windows API中的函數,CreateService()和DeleteService()

2.使用.Net Framework自帶的工具InstallUtil.exe,一般位於%SystemRoot%\Microsoft.NET\Framework\版本號\

安裝服務:installuitl [服務程序路徑]

卸載服務:installuitl /u [服務程序路徑]

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved