【发布时间】:2009-06-19 10:21:51
【问题描述】:
我必须使用 Wix 创建一个安装包。如果管理员用户正在安装软件包,它应该安装到 %programfiles%/[applicationName],如果用户是非管理员用户,那么它应该安装到其本地配置文件文件夹(LocalAppDataFolder)中。
这怎么可能?
【问题讨论】:
我必须使用 Wix 创建一个安装包。如果管理员用户正在安装软件包,它应该安装到 %programfiles%/[applicationName],如果用户是非管理员用户,那么它应该安装到其本地配置文件文件夹(LocalAppDataFolder)中。
这怎么可能?
【问题讨论】:
很久以前我为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<>"")</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>
【讨论】:
如下覆盖 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>
【讨论】:
Program Files (x86) 中,该条件执行如下覆盖:<SetProperty Id="ProgramFiles64Folder" Value="[ProgramFilesFolder]" Before="CostInitialize">
将属性 ALLUSERS 设置为 2。另请参阅 Single Package Authoring。
【讨论】: