我正在測試一個簡單的Windows服務,它檢測應用程序是否正在響應並將結果寫入文件。Windows服務檢測應用程序沒有響應?
在調試期間一切正常,但一旦我發佈服務,它不會檢測到應用程序掛起?它仍然寫入文件沒有問題,但由於某種原因,響應檢查不會觸發。好像我忽略了什麼?
// Start方法
protected override void OnStart(string[] args)
{
var worker = new Thread(DoWork);
worker.Name = "MyWorker";
worker.IsBackground = false;
worker.Start();
}
//做工作
void DoWork()
{
string curFile = AppDomain.CurrentDomain.BaseDirectory + "OnStart.txt";
Process[] runningProcs = Process.GetProcessesByName("TestApp");
if (File.Exists(AppDomain.CurrentDomain.BaseDirectory + "OnStart.txt"))
{
File.Delete(curFile);
}
while (runningProcs.Length > 0)
{
System.Threading.Thread.Sleep(2500);
foreach (Process checkProc in runningProcs)
{
if (checkProc.Responding)
{
File.AppendAllText(curFile, "Application is Responding @ " + DateTime.Now + System.Environment.NewLine);
}
else
{
File.AppendAllText(curFile, "Application is Not Responding @ " + DateTime.Now + System.Environment.NewLine);
}
}
}
}
調試輸出:
應用程序是響應@ 2014年1月15日8 :59:40 AM
應用程序是響應@ 2014年1月15日上午08點59分43秒
應用程序是響應@ 2014年1月15日上午08點59分45秒
應用程序沒有響應@15分之1/ 2014上午08時59分53秒
應用程序沒有響應@ 2014年1月15日上午08點59分55秒
應用程序沒有響應@ 2014年1月15日上午08點59分58秒
服務產出:
應用程序是響應@ 2014年1月15日上午09時03分02秒
應用程序是響應@ 2014年1月15日上午09時03分05秒
應用程序是響應@ 1/15/2014上午09時03分07秒
應用程序是響應@ 2014年1月15日上午9時03分10秒
應用程序是響應@ 2014年1月15日上午09時03分12秒
您是否將該服務作爲與桌面交互的服務運行?記住服務通常使用與普通用戶界面不同的窗口站運行,並查看它所說的Process.Responding文檔*如果進程具有用戶界面,則Responding屬性聯繫用戶界面以確定進程是否響應到用戶輸入* – Lloyd
我不這麼認爲,除非交互是在Visual Studio 2010中創建Windows服務時的默認值? – Blake
我不這麼認爲,至少不是我見過的。看到這裏的更多信息http://stackoverflow.com/questions/4237225/windows-service-allow-service-to-interact-with-desktop但它聽起來像可能已經改變以及後Vista。 – Lloyd