簡體   English   中英

在我登錄 Windows 之前,如何啟動 WPF 應用程序?

[英]How can a WPF application be launched before I logon to Windows?

我想在登錄 Windows 之前運行 WPF 應用程序。 它不應該做任何現有的 UI 只是調用 ApplicationStartup 事件 - 它會觸發我需要的功能。

目前我正在將 windows 服務與應用程序結合使用,因此服務在登錄之前運行。

現在的缺點是我的應用程序不知道服務在做什么而不輪詢它。

這是一個要求,因為機器可能會崩潰並自行重新啟動,但 Windows 在啟動后應該仍然在運行應用程序。

有什么辦法嗎?

不,這是不可能的。 WPF 應用程序是用戶模式應用程序,因此它們必須在登錄用戶的上下文中運行。 由於 Windows 是一個多用戶操作系統,因此操作系統可能正在運行,但沒有用戶登錄。在這種情況下,您的應用程序將無處可運行。

Windows 服務是唯一可以做到這一點的東西,這正是因為它們不在特定的用戶上下文下運行。 事實上,對於想要創建與用戶交互的 Windows 服務的開發人員來說,同樣的功能常常是一個令人沮喪的原因。 這是不可能的(至少從 Windows Vista 開始,它修補了之前版本中存在的所有安全漏洞)。

替代解決方案:

  • 將您的應用程序添加到默認用戶的“啟動”文件夾,這將強制它在每次用戶登錄機器時啟動。

    在這種情況下,它不會運行的唯一時間是沒有用戶登錄,在這種情況下,很難想象您的應用程序/服務實際上對任何人都有好處。

  • 將每台機器配置為在 Windows 啟動時自動以特定用戶身份登錄。 將其與上述內容結合起來,您可以解決這樣一個事實,即即使在崩潰/重新啟動之后,計算機也可能在沒有用戶登錄的情況下離開。

盡管擁有可以顯示 UI 控件的單獨用戶模式應用程序(WPF、WinForms 或其他)的模式在后台運行 Windows 服務是很常見的一種。 我不確定您認為該設置有什么問題。 在必要時輪詢服務以獲取信息並沒有錯。 根據定義,服務不需要用戶干預。 將需要用戶干預的部分分離到一個單獨的應用程序中不僅是典型的做法,而且是必要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM