2012-10-20 183 views
2

基本上我需要我的應用程序從系統啓動直到系統關閉運行。我想通了以下方法:保持應用程序始終運行

  1. 創建MyApp.exe將和MyService.exe
  2. MyApp的應該安裝的MyService作爲服務
  3. 爲MyService應該在啓動時運行,並定期檢查,如果MyApp的運行。如果它不是啓動它。

這是我寫我的服務的代碼:

protected override void OnStart(string[] args) 
{ 
    while(true) 
    { 
     int processesCount = 
      Process.GetProcessesByName(Settings.Default.MyAppName).Count() + 
      Process.GetProcessesByName(Settings.Default.MyAppName + ".vshost").Count() + 
      Process.GetProcessesByName(Settings.Default.MyAppUpdaterName).Count(); 

     if(processesCount==0) 
     { 
      //restore 
      var p = new Process { StartInfo = { FileName = Settings.Default.MyAppName, Arguments = "" } }; 
      p.Start(); 
     } 
     else 
     { 
     } 

     System.Threading.Thread.Sleep(3000); 
    } 
} 
  1. 我怎樣才能使其開始在Windows上安裝這個過程開始的?
  2. 我不確定OnStart方法中的這個無限循環是否是一個好主意。是嗎?
  3. 總體思路是否正確?
+0

爲什麼不只是有myservice.exe? –

+2

這只是對用戶不利。毫無意義的是,她當然會殺了你的服務。編寫真正有用的代碼,用戶返回並保持運行狀態。 –

+0

@HansPassant這只是我老闆給我的要求。這個應用程序應該監視工作人員的效率,所以我必須讓他們很難關閉它或忘記開始它。 :) – gisek

回答

1

的總體思路好嗎?

正如漢斯在評論中指出的那樣,這對用戶是敵意的,幸運的是在Vista或更高版本上無法運行,因爲服務運行在他們自己的Windows站點中。將所有需要的邏輯放在服務中運行,並使用IPC機制(如WCF)與(可選)正在運行的UI進行通信。如果用戶禁用服務或退出GUI尊重他們的願望...

如何安裝此過程,以便它啓動在Windows啓動?

添加到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunHKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run條目指向你的GUI應用程序。

我不確定OnStart方法中的這個無限循環是否是一個好主意。 是嗎?

號你需要,如果你需要經過的OnStart回報創建Thread做工作,做的工作,從OnStart返回。

2

我所做的是具有運行邏輯和主應用程序代碼的Windows服務。然後,如果您需要一個GUI,那麼讓Windows服務通過WCF公開Web服務,並創建一個調用Web服務的Windows應用程序。安裝時,將Windows應用程序放入Windows啓動。

這種模式將有主應用程序代碼運行所有的時間,但GUI僅達當用戶登錄。

相關問題