2011-07-12 48 views
2

這裏是場景:.NET - 啓用UAC(Windows7/Vista)時應用程序如何能夠自行更新?

我寫了一個應用程序,並從Visual Studio安裝程序項目(我生成了一個MSI文件)創建一個安裝程序。我以管理員身份將該應用程序安裝到Program Files目錄中。

當用戶使用我希望它能夠自動更新自己的應用程序(不打擾管理員)。現在,Windows 7和Windows Vista擁有UAC來保護Program Files目錄。所以,我不確定該從哪裏出發。

我覺得我讀的地方,ClickOnce是能夠安裝更新到應用程序,而不會打擾管理權限用戶。

  1. 有沒有可以幫助自動更新的應用程序?
  2. 如果有類似的應用程序,他們如何能夠繞過提升的權限?基本上,不可能以某種方式複製這些應用程序在.NET(C#)中執行的操作?

我真的只是希望一個簡單的方法來使用MSI文件執行靜默更新,因爲我不想讓普通用戶擁有管理員權限,我不希望管理員對此任務感到困擾。另外,顯然事情不能被硬編碼,因爲用戶名和密碼很容易改變。

+2

ClickOnce應用程序未安裝到c:\ program files中。所以這很容易。谷歌瀏覽器是另一個例子,安裝在C:\ Users \ YourName \ AppData \ Local –

回答

5

有一件事你能做到這一點肯定會工作是創建作爲本地系統運行的更新服務。這一個肯定會繞過UAC。

另一種選擇(因爲安裝服務可能會被視爲過於侵入)是安排任務,再次投放通過W7任務調度一個本地系統。

在這兩種情況下,這必須安裝過程中完成,否則UAC將得到再次觸發。

編輯:我只是想到了另一種處理方式:你可以做到Chrome風格。不要在程序文件中安裝任何東西,將所有應用程序二進制文件和數據保存在用戶文件夾中這樣,您就可以隨意只有用戶級權限和沒有UAC升級觸發

+0

是的,我想過,但這意味着如果一個不同的用戶登錄,它將不得不再次安裝。 –

+0

@myermian:這樣想:如果它是一個用戶應用程序,則由用戶來安裝它。同樣,Chrome的確如此工作。如果它是一個系統應用程序,然後創建更新服務可能是好的 – galets

+2

實際上chrome不會再安裝到appdata中,它會安裝到程序文件中,並且仍然能夠自動更新自身。 –

6

這是可能的,而不需要管理員權限如果安裝和更新包都使用相同的數字證書籤名更新使用MSI應用程序。

這就是所謂的UAC修補。 This是MSDN上的相關頁面。

+0

獲得簽名證書不需要花錢嗎?或者,有沒有辦法通過Visual Studio來實現? –

+0

您可以生成自己的證書進行測試,但用戶可能會收到一條警告,說明它不可信。 startssl.com有相當便宜的證書。 (此刻離線) – ZippyV

+0

他們只會在第一次安裝或更新時纔會收到警告嗎? –

0

的ClickOnce不安裝應用程序文件是如何避免它(如果有人需要去嘗試,後來找到該文件夾​​,這是非常煩人)。沒有任何方法可以繞過UAC,我建議你這樣做:將安裝文件夾的所有權轉讓給本地用戶,使用icacls和takeown,這就是Steam允許自己將遊戲安裝到它的文件夾。

編輯:您也可以以SetSecurityInfo的代碼授予本地用戶的所有權。

相關問題