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

Set default installation directory depending on rights

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

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

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

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

使用普通 Wix 似乎有一个 solution,可以管理。

如何,这可以通过使用 Wix# 来完成吗?

我不得不提的是,我真的很缺乏独自完成这项工作的技能,因为我对 WiX、Msi 甚至 C# 都不是很深入。因此,我正在寻找一个最小的、可重现的解决方案来解决我的问题。

在您链接的示例中(由 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

The directory ID must be all uppercase characters because it must be passed from the UI to the execute sequence to take effect.

相关:Wix - Setting Install Folder correctly