Wix Burn:如何存储自定义InstallFolder以供以后修改?

时间:2017-01-25 10:26:05

标签: wix burn wix3.10

我正试图解决这个问题一段时间了。我为我的Bootstrapper应用程序编写了一个自定义UI。为InstallFolder设置默认值不是问题,但是当用户更改此路径时,如何存储此路径以便以后添加/删除程序中的更改,例如,什么时候应该通过修改Bundle安装捆绑包中的另一个包? 在Registry中写入可能是一个选项,但Bootstrapper Application不会一直运行,因此无法写入HKLM。但应该有一种方法可以做到这一点,我在Visual Studio中看到了类似的东西......

1 个答案:

答案 0 :(得分:0)

您应该将InstallFolder值存储在注册表中,并将其与引导程序应用程序一起打包的MSI存储在一个(或全部取决于它的创作方式)。在启动时,您可以使用util:RegistrySearch在引导程序中查找并设置InstallFolder。

<Fragment>      
    <util:RegistrySearch
        Id="ServerInstalledCheck"
        Root="HKLM"
        Key="SOFTWARE\$(var.OEMRegistryRootKeyName)\v7"
        Value="ServerPath"
        Result="value"
        Variable="ServerInstalled"/>
    <util:DirectorySearch
        Path='[ServerInstalled]'
        Variable='InstallFolder'
        After='ServerInstalledCheck'
        Condition='ServerInstalled' />
</Fragment>

我认为您可以直接在注册表搜索中设置变量InstallFolder并省略DirectorySearch。 DirectorySearch方法仅用于确保我们仅将InstallFolder设置为机器上实际存在的位置。可能还有其他优点,但目前我无法想到它们。

这将在全新安装时保留默认的InstallFolder位置,并在运行卸载/修改/升级时“记住”所选的安装位置。

你是对的,你不能依赖在你的bootstrapper应用程序中编写任何注册表项,因为它不能保证(实际上不应该)运行提升。

<小时/>

这基本上遵循'remember property'模式,解释为here。每当您想要在修改/升级/删除期间记住先前安装中设置的值时,通常都会转到。