我有一个场景,在一台特定的机器上,我正在用MSI安装程序安装我的自定义软件。MSI安装程序是用PerMachine
标签创建的,因此该机器的所有用户都可以使用该软件。现在,
- 我在C:\MyApp\目录下安装了该软件
- 然后我修改了C:\MyApp\Config文件夹中的一些配置文件,以确保软件与我的其他服务连接
- 我启动了应用程序,运行良好
现在,在同一台机器上,我使用另一个用户登录。
- 我启动了应用程序
- MSI窗口弹出,带有一些安装进度条
- 它消失,应用程序启动,但无法加载
- 但是我修改过的所有文件现在都恢复了,我需要再次修改它们
几点:
- 我的安装目录是C:\MyApp,而不是任何自定义用户目录。因此,修改后的文件应该适用于所有用户
- 我认为MSI在我使用新用户登录时会回滚更改
如何停止此操作?
请帮助
自我修复 :Windows Installer自我修复是您看到的行为的原因。有关发生的情况的解释,请参阅链接。点击此处查看更多信息-从各个角度提供自我修复信息的几个链接。
简短解释 :本质上,启动广告快捷方式会触发对已安装文件的完整性检查,如果发现文件或注册表设置丢失,则会进行自我修复。它将放置丢失的文件和设置。在这个过程中,它有时会覆盖更改的设置文件——你描述的问题(由于Windows Installer的各种文件覆盖奇怪之处——一个带有各种提示的长答案(。
修复 :我对此的首选解决方案是不安装设置文件并更新它们,而是让应用程序在首次启动时生成它们——每个用户一个文件,或者为所有用户共享一个文件。也可以使用安装的设置文件的只读副本将其复制到生成并更新的新文件中。我还建议您将这些文件放在用户配置文件中的可写位置,而不是放在主文件夹中。您的设置永远不会干扰这些生成的文件。您也可以尝试设置文件的托管组件";"永久";以及";从不重写";。不太整洁。这里有一大堆关于这个问题的咆哮。在我看来,最好的解决方案是将设置保存在数据库中,并在发布时进行设置。这样可以很好地控制所有设置。注意网络和防火墙问题。
我希望这能回答你的问题。您正在安装IIS文件吗?我发现商业工具Advanced Installer有更好的IIS安装功能列表,尽管我缺乏足够的数据来总结。这里有一些视频:https://www.youtube.com/c/advancedinstaller/search?query=IIS-WiX也很好,但没有高级安装程序的漂亮GUI。
注意 :您真的不应该安装到C:\的根目录下。Windows安装程序积极尝试使其变得困难,并且可能会产生副作用。但是,您可以将IIS文件夹作为目标—无论它们位于何处。
更新 :我找到了关于如何允许选择性更新设置文件的旧答案-我不得不从Wayback中恢复链接的论坛答案。