如果应用程序以其他用户启动,MSI 安装程序将恢复修改后的安装文件

MSI Installer revert the modified installation files if application starts with other user

我有一个场景, 在一台特定的机器上,我正在使用 MSI 安装程序安装我的自定义软件。 MSI 安装程序是使用 PerMachine 标签创建的,因此该机器的所有用户都可以使用该软件。 现在,

  1. 我把软件安装在C:\MyApp\目录下。
  2. 然后我修改了 C:\MyApp\Config 文件夹中的一些配置文件,以确保该软件与我的其他服务连接。
  3. 我启动了应用程序,它工作正常。

现在,在同一台机器上,我用另一个用户登录了。

  1. 我开始申请了。
  2. MSI windows 带有一些安装进度条的弹出窗口。
  3. 它消失了,应用程序启动但加载失败。
  4. 但是我修改过的所有文件现在都被还原了,我需要重新修改那些。

几点:

  1. 我的安装目录是C:\MyApp,不是任何自定义用户目录。所以修改后的文件应该是给所有用户的。
  2. 我认为当我使用新用户登录时 MSI 正在回滚更改。

如何停止?

请帮忙

自我修复Windows Installer self-repair is the cause of the behavior you see. See the link for an explanation of what happens. See more here - 几个链接,从不同角度提供自我修复信息。

简短说明:本质上,广告快捷方式的启动会触发对已安装文件的完整性检查,如果文件或注册表设置发现丢失了,随之而来的是自我修复。它将放置丢失的文件和设置。在此过程中,它有时会覆盖更改的设置文件 - 您描述的问题(由于各种 file overwrite oddities of Windows Installer - 带有各种提示的长答案)。

Fix?:我的首选修复方法是不安装设置文件并更新它们,而是安装您的应用程序在第一次启动时生成它们 - 每个用户一个文件或所有用户共享一个文件。您还可以使用您安装的设置文件的只读副本复制到您生成和更新的新文件。我还建议您将这些文件放在用户配置文件中的可写位置,而不是主文件夹中。您的设置永远不会干扰这些生成的文件。您也可以尝试将文件的托管组件设置为“永久”和“永不覆盖”。不是很整洁。 Here is a whole rant on the subject。在我看来,最好的解决方案是将设置保存在数据库中并在启动时获取它们。这样可以很好地控制所有设置。留意网络和防火墙问题。

我希望这能回答您的问题。您正在安装 IIS 文件吗?我发现 commercial tool Advanced Installer to have the better feature list for IIS installation - though I lack enough data to conclude. Some videos here: https://www.youtube.com/c/advancedinstaller/search?query=IIS - WiX 也非常好,但没有 Advanced Installer 的漂亮 GUI。

注意:你根本不应该安装到 C:\ 的根目录下。 Windows 安装程序积极尝试使其变得困难,并且可能会产生副作用。但是,您可以将 IIS 文件夹作为目标 - 无论它们位于何处。

更新: I found this old answer on how to allow selective update of settings files - I had to resurrect the linked forum answers from Wayback.