2009-04-13 146 views
3

我有3個Windows服務問題Windows服務問題

  1. 是WS可以在後臺工作嗎?每2分鐘可以做一些工作嗎? (如果是的話,我可以得到一些幫助嗎?)

  2. 如何以簡單的方式安裝WS? (不與Installutil.exe .......)

  3. 如何從Windows服務運行.exe文件?

我已經試過這樣:

System.Diagnostics.Process G = new Process(); 
    G.StartInfo.FileName = @"d:\demo.exe"; 
    G.Start(); 

,但沒有奏效。

回答

2
  1. 是的Windows服務可以並且在後臺工作。要每2分鐘執行一次相同的工作,請使用system.Timer類並將代碼放入onElapsed事件中。我最近創建了這種類型的服務,發現可以使用兩種類型的計時器,請確保使用正確的計時器,否則您將找不到onElapsed事件。

  2. 我還沒有嘗試安裝沒有InstallUtil.exe,但我確實有一個.bat文件,我使用它作爲我的主應用程序安裝的一部分運行。

從Windows服務運行.exe文件,運行從Windows服務的.exe我用你的後續問題:

Process p = new Process(); 
p.StartInfo.WorkingDirectory = @"C:\"; 
p.StartInfo.FileName = @"C:\demo.exe"; 
p.StartInfo.CreateNoWindow = true; 
p.Start(); 
p.WaitForExit(); 

記住可執行文件將在運行這意味着它無法在桌面上顯示任何內容。如果您希望看到任何窗口打開或.exe需要任何用戶輸入,那麼您會感到失望,並且.exe​​可能無限期地等待。 (我發現這個鏈接Launch external programs幫助,也有這個問題上 - Launching an Application (.EXE) from C#

4

Windows服務應該在後臺工作,默認情況下。他們希望在開始後立即將控制權交還給服務經理,因此通常您會啓動一個線程來處理您的服務任務。

這就是說,System.Threading.Timer類應該適用於啓動定期運行的定時器。

至於安裝,您應該使用Installutil.exe - 這是安裝Windows服務的標準方式。

我建議看看this codeproject article.它有一個很好,乾淨的模板,你可以使用。另外,還有一個批處理文件示例來簡化Installutil的使用,這可能會使它更「更好」。

2

如果您使用VS2008進行開發,那麼您有一個可用於創建Windows服務的模板。基本上,您將創建一個Timer(System.Windows.Timers.Timer),在OnStart方法上進行初始化,在OnStop方法上執行清理和定型,並初始化Timer(在OnStart上),或者使用按需)

你可以看一下這一個basic example或在這裏,與timers

對於安裝爲例,除了在另一個答案的選項,你也可以創建一個安裝項目,再次檢查模板項目

1

您還可以使用sc.exe來安裝您的應用程序作爲服務,但它沒有太多不同於InstallUtil.exe安裝。它確實提供了對命令行服務的更多控制。

Here is an older article describing sc.exe's use.也只是從命令提示符運行sc將顯示它可能的命令。

0

就像另一種想法一樣,如果創建服務太難,您可以安排每兩分鐘運行一次任務。