Wix 工具集与 InstallShield - VirtualStore Access

Wix Toolset vs. InstallShield - VirtualStore Access

我使用 VS2010 开发了一个应用程序,并使用 IS Limited Edition 进行了设置部署。该应用程序在 XML 文件中提供了一些数据,该文件安装在同一文件夹中。如果应用程序在 XML 文件中进行更改,则会将其保存在 virtualStore 中。

我现在使用 VS2015 和 Wix 工具集。该应用程序可以编译,我可以编写一个 WXS 文件。新构建的 MSI 安装应用程序,一切似乎都正常。但是现在应用程序无法访问 XML 文件。访问被拒绝。 我试图将 MSI 与 Orca 进行比较,但没有发现任何值得注意的东西。我不确定这是设置问题还是应用程序本身的问题。

编辑

如果我在新安装中复制 "old" EXE 文件,应用程序可以访问 XML 文件。

感谢您的帮助和提示

如果某个程序似乎来自 Windows Vista 之前的版本,运行 作为受限用户,并尝试写入某些 machine-only 位置,Windows 可能作为向后兼容性垫片的一部分,重定向其对虚拟商店的访问。如果程序似乎不是来自 Windows Vista 之前的程序,则不会执行重定向。

我相信 Windows 通过读取受支持平台的清单 - application manifest 中的 supportedOS 元素来检测程序是否来自 Windows Vista 之前的版本。我的猜测是你的工具链从 VS 2010 到 VS 2015 的变化导致这个元素被添加到你的应用程序的清单中(Windows XP 已经超过了它支持的生命周期,因此 Visual Studio 2015 可以隐含地假设你是至少支持 Vista)。

您可以覆盖清单,但实际上您应该修复您的程序,使其不尝试写入 per-machine 位置。理想情况下,您应该使用 LocalAppData 文件夹等位置,但为了向后兼容,至少从虚拟存储中读取旧文件可能会有好处。