【问题标题】:WiX Installer - Children of LocalAppDataFolder installed to wrong location after UAC promptWiX 安装程序 - 在 UAC 提示后,LocalAppDataFolder 的子项安装到错误的位置
【发布时间】:2018-07-25 18:55:08
【问题描述】:

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>

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

我们也将文件安装到“程序文件”,因此如果在活动用户的文件夹中找不到这些文件,但我对这些文件感兴趣看看是否有 WiX 特定的做事方式。

【问题讨论】:

  • 按用户数据的安装通常不适用于 WiX 或 Windows Installer。要支持多个运行安装的用户,您必须创建一个公布的快捷方式,以便为其他用户运行修复并安装丢失的每个用户数据。广告快捷方式有其自身的问题,即使没有真正“损坏”的任何东西,也往往倾向于调用修复,从而给用户带来麻烦。最佳做法是让应用程序处理每个用户的数据。

标签: wix windows-installer


【解决方案1】:

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

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


添加一些链接:

【讨论】:

  • 首先,感谢您链接到其他 SO 帖子,我讨厌发布重复问题,但这次我的 Google 魔法让我失望了。我害怕抄袭是我唯一的选择。在这种情况下,这是否意味着无法清理复制到单个用户目录的文件?
  • 一旦文件进入用户配置文件,它们在技术上就是用户数据,在我看来,用户数据不应该被卸载或干预。如果要安装所有用户共享的文件,可以改为安装到 %ProgramData%。这应该映射到 MSI 中的CommonAppDataFolder property(不同操作系统中的重定向和重新定义如此之多)。然后只有一个文件实例,您可以在卸载时清除所有内容。
  • 我想知道是否可以连接到 Microsoft 的 Cleanmgr.exe(按住 Windows Key 启动,点击 R 并键入 Cleanmgr.exe 并按 Enter)以允许清理作为一种“垃圾收集”功能,但我从来没有看过它。我想说,如果需要,最好在支持文章中记录如何清除剩余的用户数据。
  • 文档方法可能最适合我的情况,因为每个用户都需要他们不同的文件副本,因为他们可以对它们进行独立更改。感谢您的帮助!
  • 没问题,很高兴这对您有意义。如果您遇到预先存在的用户数据(在 HKCU 或用户配置文件中)存在不一致需要解决以使您的应用程序正常运行的情况(用于保存的工具栏自定义的二进制流在启动时突然使您的应用程序崩溃 - 例如),有一种方法可以在这里查看:forum.installsite.net/index.php?showtopic=21552。您可以在绝对必要时使用应用程序启动序列对每个用户进行任何“数据清理”(并确保清理只运行一次)。
猜你喜欢
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
相关资源
最近更新 更多