2010-03-05 84 views
8

我們有一套程序在啓動時檢查新版本,然後下載新版本以在需要時運行。這顯然是Windows 7中的一個問題,當它被鎖定爲「標準用戶」時,因爲它們無法寫入c:\ program files目錄及其下方。任何人都看到了一個解決問題的應用程序的例子嗎?自動程序更新和Windows 7

我們的應用程序是用Delphi編寫的,但任何語言的例子都是有用的。

在此先感謝

更新:

我們已經有determing新版本是否存在系統中,唯一的問題是下載並安裝(如果需要的話),因爲這需要提升。我想不出一種不需要提升提示的方式,或者我們的用戶減少他們的安全設置。

更新2:

我問過一個subsequent question,而不是在這裏增加一個新的

回答

7

有應用程序安裝兩個選項:

  1. 應用是適用於所有用戶:安裝或更新需要提升爲Windows Vista和高達
  2. 的應用程序是可用於一個用戶:安裝或更新用戶配置文件中的應用程序%LOCALAPPDATA%,不需要海拔

廣告2:Google Chrome是否這樣做。它安裝在這裏的.exe文件:

%LOCALAPPDATA%\谷歌\鍍鉻\應用\的chrome.exe

--jeroen

+0

Jeroen, 這看起來幾乎是正確的答案。我可以在本地註冊類型庫(對於一個用戶)嗎? – Mmarquee 2010-03-06 15:37:56

+0

如果您維護您自己的註冊機制,您可以。如果您使用默認(全系統)註冊機制,則不能使用。你想註冊什麼樣的功能? – 2010-03-06 18:00:08

+0

我們正在註冊類型庫。似乎有一個贏得API調用,這樣做,每個用戶德爾福不發佈。然後,我們使用這些typelib來提供允許使用的功能,以將我們單獨的功能集合到一個「應用程序」中。這是我們目前所做的,但在XP中,我們可以避開它,而在Windows 7中,我們不能。 – Mmarquee 2010-03-14 07:57:43

6

通常你會看到什麼應用程序做,如果它需要升級的權限是這樣的。

  1. 應用確定是否需要升級
  2. 應用程序啓動,需要「管理員」權限的「更新」服務
  3. 應用程序更新本身與此更新
  4. 應用程序重新啓動

這是一種非常常見的情況,尤其是因爲更新自己的DLL需要進入輔助進程。

1

或者你可以擁有它,以便用戶運行一個啓動程序。

  1. 應用程序使用LOCALAPPPATH \文件夾來存儲主應用程序的緩存。
  2. 啓動程序檢查互聯網是否具有比緩存文件更新版本的文件。
  3. 啓動啓動在LOCALAPPPATH緩存的應用
+0

如果您啓動的應用程序包含「setup」或「install」作爲其名稱的一部分,它會自動提升(在課程提示後),允許它寫入這些受保護的位。 – skamradt 2010-03-05 16:41:49

+0

@skamradt - 完美,是的 - 只需記住它需要使用setup或install作爲名稱的一部分進行編譯,它不能在!之後重命名! – 2010-03-08 08:36:22

1

你的應用程序可以檢查是否有新版本可用的遠程服務器上。如果是這樣,那麼它可以在用戶特定文件夾之一下載更新文件,例如用戶的臨時文件夾。您可以使用SHGetSpecialFolder API函數獲取此類特殊文件夾的地址。

下載完成後,您可以彈出一個對話框,告訴用戶您已準備好進行更新。如果用戶同意更新,則可以使用提升的權限(以管理員身份)運行更新程序進程,並且更新程序進程可以使用已經下載到用戶Temp文件夾中的文件替換安裝路徑中的現有文件。要運行更新作爲管理員,您可以使用ShellExecute

ShellExecute(0,'runas','notepad.exe',nil,nil,SW_SHOWNORMAL); 

當更新完成後,你的更新過程可以重新啓動應用程序。

+1

您無法升級已在運行的進程,但可以啓動一個提升爲管理權限的新進程,並且上面的代碼執行此操作。 – vcldeveloper 2010-05-21 21:12:23

3

這裏有一些技巧讓你避開更新的挑戰:

  1. 如果您的文件名稱爲'update.exe'或'install.exe',那麼它會自動強制UAC提升提示。這是使現有軟件繞過Windows Vista/7權限的簡單方法。
  2. 從應用程序中管理更新檢查和更新過程並不是一個好主意。問題是您的應用程序可能會鎖定文件並需要自行更新。外部應用程序應該管理你的更新。
  3. 最簡單的更新解決方案是進行HTTP調用,檢查當前產品版本號,然後根據需要下載安裝程序二進制文件。這不會給你任何更新的靈活性,但它是一個快速和簡單的解決方案。

我們公司銷售的軟件特別有助於Windows 7 UAC的自動更新(您可以通過點擊此處訪問自動更新+ link text)。使用第三方解決方案的最佳理由 - 任何解決方案 - 都是您的更新將具有更大的靈活性,並避免支持不同Windows版本的挑戰。

1

如果您的應用程序使用MSI(Windows Installer)作爲安裝程序,那麼User Account Control Patching(如果配置正確)可以讓您安裝更新而不提升。

0
  1. 如果您的安裝程序未在admin下運行 - 您不需要任何其他權限來安裝更新。

  2. 如果您的安裝程序是在admin下運行的 - 那麼它可以在Task Sheduler中創建一個任務。假設,每週運行一次這個任務,在這個帳戶下(admin)和最高權限。任務將是您的更新程序。簡單。

+0

另請參閱:https://blogs.msdn.com/b/larryosterman/archive/2007/08/20/applet-mitigations-updaters.aspx – Alex 2010-06-15 15:31:54