Wix - 根据权限更改安装文件夹

7

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

如何实现呢?

3个回答

5
我曾经为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>

3
以下覆盖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)”中,如下所示:<SetProperty Id="ProgramFiles64Folder" Value="[ProgramFilesFolder]" Before="CostInitialize">。 - rominator007

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接