原因多種:
1. service程序有bug,自行寫測試方法排錯。
2. service程序使用System.Configuration.ConfigurationManager類庫嘗試讀取app.config下的配置項等
安裝服務之后System.Configuration.ConfigurationManager找到的路徑不再是原來的exe所在路徑,故不可使用;
可以另外寫xml或者Json配置文件絕對路徑讀取。
3. OnStart方法響應邏輯花費過長時間,建議進行異步調用,如開啟子線程或使用timer,使用timer例如:
1 System.Timers.Timer _timer = new System.Timers.Timer(); 2 protected override void OnStart(string[] args) 3 { 4 try 5 { 6 int _interval = 1000 * 60 * interval; 7 _timer.Interval = _interval; 8 _timer.AutoReset = true; 9 _timer.Elapsed += new System.Timers.ElapsedEventHandler(Time_Elapsed); 10 _timer.Enabled = true; 11 WriteLog.SaveInfoLog("服務已啟動"); 12 } 13 catch (Exception ex) 14 { 15 WriteLog.SaveExceptionLog(ex.Message); 16 } 17 18 } 19 private void Time_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 20 { 21 try 22 { 23 if (!isRun) 24 { 25 //調用業務方法 26 } 27 } 28 catch (Exception ex) 29 { 30 WriteLog.SaveExceptionLog("Error:" + ex.Message); 31 } 32 }
4. 檢查.Net FrameWork版本。
5. 檢查ProjectInstaller的serviceInstaller控件屬性中的服務名稱是否與啟動的服務名一致。