根据权限设置默认安装目录

4

我正在尝试使用Wix#构建MSI安装程序,与Wix相比,我非常满意其易于使用的语法。

现在,我正在尝试做一些非标准的事情,但我有点迷失方向,因为我并不真正熟悉Wix。

基本上,我想根据安装程序是由管理员权限调用还是被普通用户安装来设置默认目标安装目录。

作为普通用户,我想将默认安装目录设置为%LocalAppData%\MyProduct,而作为管理员,则默认安装目录应为%ProgramFiles%

使用纯Wix似乎有一个可行的解决方案

那么,如何使用Wix#实现呢?

值得一提的是,我缺乏完成这项任务所需的技能,因为我对WiX、Msi甚至C#都不是很了解。因此,我在寻找一个最小化的、可重现的问题解决方案

1个回答

4
在您提供的示例中(由WiX的作者提供),它展示了如何根据用户或计算机设置目录:
<DirectoryRef Id="TARGETDIR">
    <Directory Id="ApplicationFolder" Name="App" />
</DirectoryRef>

如果是管理员安装,则为Per-Machine,如果不是管理员,则默认为Per User:

<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传递到执行序列才能生效。

相关:Wix - 正确设置安装文件夹


非常感谢您提供详细的解决方案。我刚刚修改了我的问题,因为我正在寻找一个使用Wix#的最小化可重现解决方案。在这里,我只是缺少WiX和C#的技能,无法自己完成任何工作。您能否发布一个完整的使用Wix#的C#解决方案呢? - Aleph0

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