0

我正在尝试解决这个问题一段时间。我为我的引导程序应用程序创作了一个自定义 UI。为 InstallFolder 设置默认值不是问题,但是当用户更改此路径时,如何存储此路径以供以后在添加/删除程序中进行更改,例如,当应通过修改捆绑包来安装捆绑包中的另一个包时?在注册表中写入可能是一种选择,但引导程序应用程序不会一直运行提升,因此它无法写入 HKLM。但是应该有办法做到这一点,我在 Visual Studio 中看到了类似的东西......

4

1 回答 1

0

您应该将 InstallFolder 值存储在注册表中的一个(或全部取决于它的创作方式)与引导程序应用程序一起打包的 MSI 中。在启动时,您可以使用 autil: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 位置,并在运行卸载/修改/升级时“记住”选定的安装位置。

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


这基本上遵循此处解释的“记住属性”模式。每当您想记住在修改/升级/删除期间在先前安装中设置的值时,这通常是首选。

于 2017-01-25T16:03:00.367 回答