2010-02-25 98 views
2

我需要我的應用程序根據某些事件來啓動和停止Windows服務。問題是這個應用程序需要以高級普通用戶身份運行(爲了停止服務),以及在Windows啓動時自動啓動。此外,它需要在用戶界面的系統托盤中。如何設計在Windows Vista/7上以管理員身份運行的自動啓動應用程序?

我在這裏有什麼選擇?
我想,有至少兩個possibillities:

  1. 要通過把它在啓動文件夾中或者在註冊表中的.. \ Run鍵使應用程序自動啓動。但問題是,如果沒有每次Windows啓動時彈出UAC提示對話框,都可以這樣做嗎?
  2. 開發安裝在系統托盤中的獨立GUI應用程序作爲系統運行的Windows服務。但是,爲了在提升的服務和正常的系統托盤應用程序之間進行通信,我有什麼IPC可能性?

任何想法和建議?

回答

1

肯定會與選項2一起使用,並專門使用WCF(Windows Communication Foundation)使用wsHTTPS綁定與Windows Service進行通信,以便您可以驗證是否允許登錄的用戶執行操作由Windows服務託管的WCF服務。

+0

是的,我認爲這對我來說是最好的解決方案。謝謝。 – 2010-03-01 13:37:40

+0

很好的答案!謝謝。我投了! – Lin 2017-11-01 04:11:12

0

對於數字1,爲了運行具有管理員權限的應用程序,那麼就不可能沒有UAC對話框運行坡平了,還是你有管理員密碼

對於2號,這是一個有趣主題,這裏有一篇很好的文章,例如&源代碼:http://www.codeproject.com/KB/threads/process_communication.aspx主題是.net遠程處理。我相信這是在不同應用程序之間進行溝通的最佳方式。

0

實際上,對於編號1,您可以將幾個進程鏈接在一起以實現沒有UAC對話框的高級進程。像這樣

第一個過程 - >以管理員身份啓動(需要一種提供憑證的方式) - >使用ShellExecute啓動另一個過程並提供Runas動詞。 - >您的最終過程

+0

升級的應用程序啓動另一個EXE時沒有提升特權嗎?它依然沒有數字限制,根據我的經驗和我讀過的內容,你不需要在shell()命令中提供任何東西,只需要下一個exe完整路徑,下一個(新)exe將以相同的權限運行前一個。 – 2012-07-09 03:49:42

0

您可以使用計劃任務工具完成您想要的任務。對於日程安排,可以選擇安排程序在用戶登錄時運行。可以使用備用憑據運行任務。

我無法告訴你如何以編程方式設置它(可能有一個WMI接口),但通過UI很容易。

+0

我喜歡這個選項最好,永遠不能理解爲什麼UAC特權不會記住爲同一個EXE的下一次運行,但你可以通過調度程序來做到這一點,所以每個人都離開通過調度程序打開後門程序?哦,當然,他們通過銷售數字證書所獲得的美元,這些數字證書將您的應用程序自動提升爲管理員權限,而不會彈出對話框(永遠)。它將花費您的萬事達卡將近1,000美元 - 想知道MicroShaft有多少錢?爲什麼他們會做這樣的設計缺陷?只有一個後門,它的哈克! – 2012-07-09 03:53:32

相關問題