Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WiX安装程序-在UAC提示后,LocalAppDataFolder的子项安装到错误位置_Wix_Windows Installer - Fatal编程技术网

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

WiX安装程序-在UAC提示后,LocalAppDataFolder的子项安装到错误位置,wix,windows-installer,Wix,Windows Installer,WiX是个新手,我正在尝试修复我最近接管的一些软件中的一个bug。作为产品定义的一部分,我们将某些文件安装到用户的“AppData\Local”目录中。当用户具有安装权限时,当前项目设置工作正常,文件被放置在预期用户的“AppData\Local”目录中 但是,如果弹出UAC提示需要管理员凭据,则文件最终将安装在管理员帐户的“AppData\Local”目录中 在产品文件中,我们有如下内容: <Directory Id="TARGETDIR" Name="SourceDir">

WiX是个新手,我正在尝试修复我最近接管的一些软件中的一个bug。作为产品定义的一部分,我们将某些文件安装到用户的“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的方式来做事情。

我想你实际上是在输入管理员密码并指定一个管理员帐户来运行安装程序?这与提升您登录时使用的管理员帐户相反。后者应使文件安装在预期文件夹中

我赞同您描述的方法:将文件从每台机器安装的副本复制到每个用户配置文件中。只是关于这个问题的一些想法——这个问题似乎没有什么好的答案。Windows 10显然不再支持主动安装方法


加入一些链接:


一般情况下,WiX或Windows Installer无法很好地安装每用户数据。要支持运行安装的多个用户,您必须创建播发的快捷方式,以便为其他用户运行修复,并安装丢失的每用户数据。广告的快捷方式有其自身的问题,并且往往会在没有任何“损坏”的情况下调用修复,从而给用户造成麻烦。最佳做法是让应用程序处理每个用户的数据。首先,感谢您链接到其他SO帖子,我讨厌发布dup问题,但这次我的Google magic失败了。我担心复印是我唯一的选择。在这种情况下,这是否意味着无法清理复制到单个用户目录的文件?一旦文件进入用户配置文件,从技术上讲,它们是用户数据,我认为不应卸载或篡改用户数据。如果要安装所有用户共享的文件,可以改为安装到%ProgramData%。这应该映射到MSI中(在不同的操作系统中有如此多的重定向和重新定义)。然后只有一个文件实例,您可以在卸载时清除所有文件。我想知道是否可以连接到Microsoft(通过按住
Windows键
启动,点击
R
并键入
Cleanmgr.exe
并按
Enter
)以允许作为一种“垃圾收集”进行清理功能,但我从来没有抽出时间来看看它。如果需要的话,我会说最好在一篇支持文章中记录如何清除剩余的用户数据。记录方法可能最适合我的情况,因为每个用户都需要自己的文件副本,因为他们可以对其进行独立更改。谢谢你的帮助!没问题,很高兴你能理解。如果您遇到预先存在的用户数据(在HKCU或用户配置文件中)存在不一致的情况,需要解决这些不一致的问题才能使您的应用程序正常运行(例如,已保存的工具栏自定义项的二进制流在启动时突然使您的应用程序崩溃),您可以在此处进行检查:。在绝对必要的情况下,您可以使用应用程序启动序列对每个用户执行任何“数据清理”(并确保清理只运行一次)。