2012-01-04 73 views
0

我使用InstallAware進行構建並支持Web更新。在安裝過程中,用戶第一次可以選擇目標文件夾。系統也提供默認值。InstallAware將原始目標地址保持在更新模式

一切正常,直到用戶選擇他的自定義文件夾,而不是默認的文件夾。在更新模式下,安裝程序會將應用程序安裝在默認目標目錄中,而不是用戶選擇的目錄中。作爲InstallAware的文檔,更新模式將首先卸載應用程序,然後再次安裝。由於我以靜默方式運行更新,安裝程序將獲得默認值。

如何將它安裝在原始目的地?

回答

0

大多數安裝創作工具都包含一種機制,用於檢索原始安裝路徑並在升級過程中使用它。我猜的InstallAware沒有它,所以你必須自己做它:

  • custom action其查找舊的安裝路徑
  • 這個自定義操作,應該在安裝文件夾屬性設置爲舊路徑
  • 自定義操作必須運行之前CostFinalize行動

請注意,只有win32 DLL,VBScript和WiX的工具集的自定義操作可以設置安裝程序屬性。

+0

謝謝Cosmin。但是我想看一些InstallAware的具體腳本。因爲我不知道如何做你的建議。 – 2012-01-05 02:33:58

1

我將嘗試在即將推出的項目中使用InstallAware的Web更新;我可行性研究的一部分,包含在本白皮書中,儘管是從7.0版本,我假設它仍然具有現實意義:http://www.installaware.com/installaware_web_updates.pdf

最重要的是你的問題,第14條中指出:


確定更新客戶端的位置

對於以下注冊表項下的All Users安裝: HKEY_LOCAL_MACHINE \ SOFT WARE \微軟\的Windows \ CurrentVersion \卸載\

對於一個只有我安裝,而不是,看下面的註冊表下 鍵: HKEY_CURRENT_USER \ SOFTWARE \微軟\的Windows \ CurrentVersion \卸載\

在這兩個情況下,請讀取UninstallString字符串值的數據。 A 此字符串的典型值爲:「C:\ Documents and Settings \\ Application Data \\。exe」REMOVE = TRUE MODIFY = FALSE在您的 應用程序中解析此字符串以刪除命令行參數REMOVE = TRUE MODIFY = FALSE以及圍繞主字符串的雙引號。 指示更新客戶端位置的最終字符串(如 以及安裝程序)應該採用以下格式:C:\ Documents and Settings \\ Application Data \\。EXE


你需要閱讀該鍵值,並賦值爲$ TARGETDIR $(我相信這是這個名字)在MSI代碼變量。

希望有所幫助。您可能還想看看他們的白皮書patching,因爲這樣可以避免完整的安裝程序下載以及僅包含文件增量的補丁程序,從而阻止完全卸載。

+0

謝謝保羅。我通過從註冊表中讀取密鑰以相同的方式解決了這個問題。這是我的解決方案。我在這裏發佈IA代碼段代碼:'獲取64位模式下的系統設置到W64BIT如果變量W64BIT等於TRUE讀取註冊表項HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ {MyAppName} \ InstallLocation到TARGETDIR Else Read註冊表項HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ {MyAppName} \ InstallLocation到TARGETDIR End'中。這對我來說可以。這樣,你不需要解析字符串。 – 2012-03-16 14:55:50

4

幸運的是InstallAware默認實現了很簡單的方法來實現這個功能。

您可以跟蹤各種安裝參數,設置「LOADOLDDATA」InstallAware預定義編譯器變量。

如果設置爲TRUE,則安裝引擎將從較舊版本的安裝程序加載功能定義和其他保存的數據(另請參閱加載功能選擇命令以獲取IA文檔中的更多詳細信息)。通常情況下,這些數據只能在相同版本的安裝程序之間加載,而在同一安裝的應用程序版本上進行維護或卸載操作。有了這個編譯器變量的任何其他值,這個正常的行爲被保留下來。

如果您希望在不同版本的安裝程序之間遷移參數狀態,則可以在腳本代碼中使用「保存功能選項」和「加載功能選項」。

希望這可以幫助你。