WiX 安装程序 - 在 UAC 提示后将 LocalAppDataFolder 的子项安装到错误的位置

WiX Installer - Children of LocalAppDataFolder installed to wrong location after UAC prompt

WiX 的新手,我正在尝试修复我最近接手的一些软件中的错误。作为产品定义的一部分,我们将某些文件安装到用户的 "AppData\Local" 目录中。当用户具有安装权限时,当前项目设置工作正常,文件被放置在预期的用户 "AppData\Local" 目录中。

但是,如果弹出 UAC 提示需要管理员凭据,文件最终会安装在管理员帐户的 "AppData\Local" 目录中。

在产品文件中,我们有类似的内容:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="LocalAppDataFolder">
    <Directory Id="MyData" Name="My Data">
      ...
    </Directory>
  </Directory>
</Directory>

然后在 heat.exe 生成的文件中我有

<Fragment>
  <DirectoryRef Id="MyData">
    <Directory Id="UserMaps" Name="User Maps" />
  </DirectoryRef>
</Fragment>
<Fragment>
  <ComponentGroup Id="User_Maps_Components">
    <Component Id="Map1.png" Directory="UserMaps" Guid="{C27...autogenerated}">
      <File Id="Map1.png" Source="$(var.MapPath)\Map1.png" KeyPath="no" />
      <RegistryValue KeyPath="yes" Root="HKCU" Key="Software\MyApp\Usermaps" Type="integer" Value="1" Name="Map1.png" />
    </Component>
  </ComponentGroup>
</Fragment>

有没有办法确保文件将安装到启动用户的目录,而不是管理员的帐户?

我们也有文件安装到 "Program Files",所以如果在活动用户的文件夹中找不到文件,我总是可以在那里安装文件并将它们复制过来作为我的应用程序初始化逻辑的一部分,但是有兴趣看看是否有特定于 WiX 的处理方式。

我假设您实际上是在输入管理员密码并为 运行 设置指定管理员帐户?这与提升您登录的管理员帐户相反。后者应该使文件安装在预期的文件夹中。 .

我会采用您自己描述的方法:将文件从每台机器安装的副本复制到每个用户配置文件。 I wrote up some suggestions for user profile and HKCU deployment a while back。只是关于这个主题的一些想法 - 这个主题似乎没有什么好的答案。 Windows 10.

显然不再支持 Active Setup 方法

插入一些链接:

  • Create a .config folder in the user folder
  • System.UnauthorizedAccessException while running .exe under program files