2012-01-04 34 views
3

我在Wix中創建了一個安裝程序。安裝程序UI允許用戶選擇一些設置。例如,有一個複選框可爲Web服務啓用https。這些設置的值使用Rob Mensching的"Remember Property" pattern存儲在Windows註冊表中。他們使用WixUtilExtension XmlFile更新配置文件。第一次安裝應用程序工作正常。使用Wix安裝程序更改功能時更新屬性值

當用戶再次運行安裝程序(應用程序已安裝時)時,可以通過MaintenanceTypeDlg選擇更改功能。用戶可以在CustomizeDlg中添加或刪除功能。然後安裝程序嚮導允許用戶更改設置(例如https web服務)。功能更改工作正常,但當用戶更改設置時,它將被忽略(配置文件和註冊表項不會更新)。可能是因爲配置文件和註冊表項已經安裝。

如何讓安裝程序在進行功能更改時進行設置更改(更新配置文件和註冊表項)?或者,這是不是正確的事情與Windows安裝程序?

+0

在維護期間創建詳細的msi日誌文件,它應該告訴您文件,組件和功能的狀態和計劃的操作。 – 2012-01-09 12:33:26

+0

好主意。日誌文件確認在維護安裝期間註冊表值不會寫入註冊表(WriteRegistryValues操作不執行任何操作)。那麼是否有可能讓安裝程序在維護安裝期間重寫註冊表值? – Smiffy 2012-01-10 00:37:18

回答

4

XmlFile WixUtilExtension只能在兩種情況下運行。如果正在安裝它所屬的組件,xml條目將被修改,並且當組件正在被卸載時,xml條目的修改將被刪除。

在維護安裝期間,xml條目未被觸及,因爲該組件最有可能具有State:Installed,Request:Local等屬性Action:Null。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa367858.aspx

的解決方法是「設置重新安裝」這裏提到: http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/use-XmlFile-XmlConfig-in-maintenance-mode-td5520598.html

嘗試設置該屬性重新安裝= ALL使用命令行來看看是否能工程。
如果是這樣,那麼我認爲如果用戶選擇執行維護安裝,它可以動態設置。

+0

是的!設置REINSTALL和REINSTALLMODE屬性是關鍵。謝謝拉米。 – Smiffy 2012-01-13 01:23:04

+1

我花了一點時間才找到正確的方法(從命令行設置REINSTALL意味着UI不顯示MaintenanceTypeDlg,因此用戶不能選擇「更改」)。我最終從Wix源獲取了VerifyReadyDlg並進行了一些修改。我在更改按鈕控件中插入了以下兩個子元素: <![CDATA [OutOfDiskSpace <> 1]]> <![CDATA [OutOfDiskSpace <> 1]]> Smiffy 2012-01-13 01:45:22

+0

然後,我在UI中使用了新版本的VerifyReadyDlg,而不是原始版本。 REINSTALL屬性的「Server」值是包含註冊表項和配置文件的功能的ID。因此,無論用戶何時選擇更改應用程序,都會重新安裝服務器功能,確保在UI對話框中更改的任何新屬性值都會保存到註冊表和配置文件中。 – Smiffy 2012-01-13 01:45:49

0

您需要將該屬性的值保存在註冊表項中,並在維護安裝期間調用它。

<Property Id="MyProperty"> 
    <RegistrySearch 
    Id="MyProperty" 
    Root="HKLM" 
    Key="Software\Manufacturer\Product" 
    Name="MyProperty" 
    Type="raw" /> 
</Property> 

<Component Id="MyProperty"> 
    <RegistryValue 
    Id="MyProperty" 
    Root="HKLM" 
    Key="SOFTWARE\Manufacturer\Product" 
    Name="MyProperty" 
    Type="string" 
    Value="[MYPROPERTY]" 
    KeyPath="yes" /> 
</Component> 
+1

我試過這個。運行維護安裝時,從註冊表中正確調用「MyProperty」的值。但是,如果您在維護安裝期間嘗試更改其值,則新值不會寫入註冊表。 – Smiffy 2012-01-09 02:23:30

相關問題