代码之家  ›  专栏  ›  技术社区  ›  Deqing

WiX-如果注册表搜索失败,我如何安装到替代路径

wix
  •  2
  • Deqing  · 技术社区  · 14 年前

    我的程序应该安装到注册表中记录的路径。如果找不到注册表项,请安装到另一个(默认)路径。

    例如,我想要这样的东西:

    <Property Id="MYINSTALLDIR">
        <RegistrySearch Id='MyRegistry' Type='raw' Root='HKCU' Key='Software\MyApp\Foo' Name='InstallDir' />
        if not found, then set "MYINSTALLDIR" to "D:\working\defaultApps"
    </Property>    
    

    我应该如何编写wxs文件才能实现这一点?

    编辑:

    现在的问题是:

    if not found in registry, then set "MYINSTALLDIR" to LocalAppDataFolder 
    

    我试过了

    <Property Id="MYINSTALLDIR" Value="LocalAppDataFolder">
        <RegistrySearch Id='MyRegistry' Type='raw' Root='HKCU' Key='Software\MyApp\Foo' Name='InstallDir' />
    </Property>
    

    但返回错误:

    Error 1606. Could not access network location LocalAppDataFolder.
    
    2 回复  |  直到 14 年前
        1
  •  6
  •   Deqing    14 年前

    好的,我终于想好怎么做了。

    具有 Custom Action ,现在可以将默认值设置为另一个属性:

    <Property Id="MYINSTALLDIR">
        <RegistrySearch Id='MyRegistry' Type='raw' Root='HKCU' Key='Software\MyApp\Foo' Name='InstallDir' />
    </Property>
    
    <CustomAction Id="UserInstallDir" Property="InstallDir" Value="[INSTALLDIRCU]" Execute="immediate" />
    <CustomAction Id="UserInstallDirDefault" Property="InstallDir" Value="[LocalAppDataFolder]" Execute="immediate" />
    
    <InstallExecuteSequence>
        <Custom Action="UserInstallDir" After="AppSearch">MYINSTALLDIR</Custom>      
        <Custom Action="UserInstallDirDefault" After="AppSearch">NOT MYINSTALLDIR</Custom>      
    </InstallExecuteSequence>
    
        2
  •  4
  •   saschabeaumont    14 年前

    根据记忆,下面的例子应该有效。如果找不到用于搜索的值,则该属性将获得默认值。只有当搜索成功时,它才会被覆盖。

    <Property Id="MYINSTALLDIR" Value="Default Property Value">
        <RegistrySearch Id='MyRegistry' Type='raw' Root='HKCU' Key='Software\MyApp\Foo' Name='InstallDir' />
    </Property>
    
    推荐文章