【问题标题】:Wix - change the installation folder based on privilegeWix - 根据权限更改安装文件夹
【发布时间】:2009-06-19 10:21:51
【问题描述】:

我必须使用 Wix 创建一个安装包。如果管理员用户正在安装软件包,它应该安装到 %programfiles%/[applicationName],如果用户是非管理员用户,那么它应该安装到其本地配置文件文件夹(LocalAppDataFolder)中。

这怎么可能?

【问题讨论】:

    标签: wix wix3


    【解决方案1】:

    很久以前我为ClickThrough 写了这篇文章。解决方案看起来很像这样(您提供一个名为“ApplicationFolderName”的属性):

        <Property Id="A" Secure="yes" />
    
        <DirectoryRef Id="TARGETDIR">
            <Directory Id="ApplicationFolder" Name="App" />
        </DirectoryRef>
    
        <Condition Message="Must specify TARGETDIR property when doing an administrative install.">Installed OR (ACTION="ADMIN" AND TARGETDIR&lt;&gt;"")</Condition>
    
        <CustomAction Id="TARGETDIRtoA" Property="A" Value="[TARGETDIR]" Execute="firstSequence" />
    
        <CustomAction Id="SpecifiedA" Property="ApplicationFolder" Value="[A]" Execute="immediate" />
        <CustomAction Id="PerMachineInstall" Property="ApplicationFolder" Value="[ProgramFilesFolder]\[ApplicationFolderName]" Execute="immediate" />
        <CustomAction Id="PerUserInstall" Property="ApplicationFolder" Value="[LocalAppDataFolder]\Apps\[ApplicationFolderName]" Execute="immediate" />
    
        <InstallUISequence>
            <Custom Action="SpecifiedA" Before="LaunchConditions">NOT Installed</Custom>
        </InstallUISequence>
    
        <InstallExecuteSequence>
            <Custom Action="PerMachineInstall" Before="CostFinalize">NOT Installed AND ACTION="INSTALL" AND A="" AND (ALLUSERS=1 OR (ALLUSERS=2 AND Privileged))</Custom>
            <Custom Action="PerUserInstall" Before="CostFinalize">NOT Installed AND ACTION="INSTALL" AND A="" AND (ALLUSERS="" OR (ALLUSERS=2 AND (NOT Privileged))</Custom>
        </InstallExecuteSequence>
    

    【讨论】:

      【解决方案2】:

      如下覆盖 ProgramFilesFolder 属性应该可以工作:

      <SetProperty Id="ProgramFilesFolder" Value="[AppDataFolder]" Before="CostFinalize"><![CDATA[ NOT Privileged]]></SetProperty>
      
      <Directory Id="ProgramFilesFolder" Name="PFiles">
          <Directory Id="INSTALLDIR" Name="My Folder">
              ...
          </Directory>
      </Directory>
      

      【讨论】:

      • 我用它创建了一个 64 位安装程序,它可以根据 SetProperty 元素中的条件将所有内容安装到 Program Files (x86) 中,该条件执行如下覆盖:&lt;SetProperty Id="ProgramFiles64Folder" Value="[ProgramFilesFolder]" Before="CostInitialize"&gt;
      【解决方案3】:

      将属性 ALLUSERS 设置为 2。另请参阅 Single Package Authoring。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-17
        • 2021-03-01
        • 1970-01-01
        • 2012-02-16
        • 1970-01-01
        • 2012-04-27
        • 2018-09-06
        相关资源
        最近更新 更多