2011-03-20 14 views
1

我創建了一個應用程序,其唯一的UI是一個Windows任務欄圖標。當應用程序直接啓動(例如在Windows資源管理器中雙擊它)時,它會正確顯示任務欄圖標。我需要確保這個應用程序始終運行。對於這一點,我創建了C#中的窗口服務,每10秒鐘檢查是否應用程序仍然在運行,如果沒有,它會通過調用System用戶的任務欄圖標在哪裏?

System.Diagnostics.Process.Start("MyApp.exe"); 

的過程開始,我可以從任務看到它重新啓動經理。但是,我找不到任務欄圖標。我注意到的一件事是,它從Window Service啓動時運行在System用戶名下。

如何從Windows Service啓動時顯示任務欄圖標?

+0

請儘量避免以SYSTEM身份運行您的服務。爲此,我認爲LOCALSERVICE是你需要的。 – 2011-03-20 09:31:51

+0

爲什麼你需要確保它始終運行?什麼是阻止用戶停止守衛服務,然後殺死應用程序?還是應用程序只是片狀和崩潰了很多? – 2011-03-20 09:36:12

回答

1

服務無法訪問與Vista或Win7上的用戶相同的桌面。默認情況下由其他進程啓動的應用程序與啓動它們的應用程序具有相同的權限(它們在同一個帳戶下運行)。你需要讓你的服務在一個用戶賬戶下運行,或者使用ImpersonateLoggedOnUser(不知道這個函數的.NET版本是什麼 - 希望你能以此爲起點找到它)。

+0

該服務需要使用'CreateProcessAsUser()'函數(或任何.NET equivilent)來運行托盤圖標應用程序。 – 2011-03-20 09:16:17