我正在尝试使用Wix#来构建MSI安装程序,与Wix相比,我对易于使用的语法非常满意。
现在,我正在尝试做一些不合标准的事情,但由于我不太了解Wix,我有点迷失了。
基本上,我想根据安装程序是用管理员权限调用还是由默认用户安装来设置默认目标安装目录。
作为普通用户,我想将默认安装目录设置为%LocalAppData%\MyProduct
,而作为管理员,默认安装目录应该为%ProgramFiles%
。
使用普通Wix似乎有一个solution,可以管理。
如何使用Wix#完成此操作?
我不得不提的是,我真的很想独自做到这一点,因为我对任何深度的WiX,Msi甚至C#都不了解。因此,我正在寻找问题的最小的,可重复的解决方案。
答案 0 :(得分:4)
在您链接的示例中(由WiX的作者编写)显示了如何根据每个用户或每台计算机来设置目录:
<DirectoryRef Id="TARGETDIR">
<Directory Id="ApplicationFolder" Name="App" />
</DirectoryRef>
如果是管理员安装其按机器,如果不是管理员,则默认为按用户:
<CustomAction Id="PerMachineInstall" Property="ApplicationFolder" Value="[ProgramFilesFolder]\[ApplicationFolderName]" Execute="immediate" />
<CustomAction Id="PerUserInstall" Property="ApplicationFolder" Value="[LocalAppDataFolder]\Apps\[ApplicationFolderName]" Execute="immediate" />
您应该可以将[LocalAppDataFolder]\Apps\[ApplicationFolderName]
更改为[LocalAppData]\MyProduct
该代码的问题是<Directory Id="ApplicationFolder"
是小写字母。
按照https://wixtoolset.org/documentation/manual/v3/xsd/wix/setdirectory.html
目录ID必须全部为大写字符,因为它必须从UI传递到执行序列才能生效。