Microsoft Visual Studio 安装程序项目 - 如何向使用 Process.Start() 执行但没有修复选项的 MSI 提供重新启动提示

2024-05-11

问题如下:我在 MSI 卸载之前调用了自定义卸载程序。正确关闭我的应用程序后,它会调用msiexec使用 Windows Installer 卸载 MSI。

这是通过执行“msiexec /x{PRODUCT_CODE} /promptrestart”之类的命令来完成的。

这里有一点很重要——如果卸载后系统没有重新启动,然后用户再次安装该应用程序,那么下次重新启动后它的一些文件将被删除,所以这是不可接受的。重新启动是必需的,但是,我需要迅速、自动和无条件的重新启动是邪恶的,永远不应该使用。

因此,上面的调用会显示 STUPID“卸载/修复”对话框。我不想要这个。当我使用“msiexec /x{PRODUCT_CODE} /qr /promptrestart”时,它会很好地卸载,但它拒绝之后重新启动。

我已阅读有关设置 ARPNOREPAIR 属性的信息。

但是给出这个答案的白痴不会关心说在哪里以及如何设置该属性。甚至……财产属于哪里,它是什么的财产? MSI 文件?

那么,也许这是实现这一目标的另一种方法,比如从我的代码中调用重新启动的提示,但是......如何?卸载程序应该删除我的所有文件,直到那一刻。也许卸载过程完成后可以执行某种脚本?

(还有一个问题,Windows Installer 不会删除我的应用程序创建的所有文件和目录。如果我可以执行一些代码来更好地清理,那就太好了。)

UPDATE我看到前面有两条路径:制作一个在卸载结束后运行的脚本(例如使用注册表或任务计划程序或 IDK),使用 Win32 API 修改 MSI 文件,因为据我所知,可以通过这种方式更改其属性。


问题: 先问几个问题。

  • 重启管理器: 你熟悉吗the 重启管理器MSI的特点 https://stackoverflow.com/questions/54871192/adding-launch-conditions-to-microsoft-visual-studio-installer-projects-check-ap/54871579#54871579?旨在帮助关闭和重新启动 应用程序无需重新启动。我会尽快给它 撇去?我认为这才是你真正的解决方案?
  • Alternative MSI Tools: There are many tools available for creating MSI setups https://stackoverflow.com/questions/50225031/windows-service-not-shown-in-add-remove-programs-under-control-panel/50229840#50229840. This link also contains further links to a summary of the shortcomings of Visual Studio Installer Projects.
    • Using 免费的开源 WiX 工具集 https://stackoverflow.com/a/25005864/129130- 例如 -您可以更改 MSI 对话框 http://neilsleightholm.blogspot.com/2008/08/customised-uis-for-wix.html. Github 样本 https://github.com/skullpsg/Wix_installer/tree/master/BlogCustomAction/BlogCustomAction. 所以问题1 https://stackoverflow.com/questions/597025/how-to-build-a-minimal-wix-installer-ui-without-a-license-page. 所以问题2 https://stackoverflow.com/questions/2052789/adding-first-custom-dialog-box-to-wix-in-visualstudio-environment。这是WiX 工具集官方网站 http://wixtoolset.org/.
    • 添加我自己的答案:更改 Wix 对话框的文本颜色 https://stackoverflow.com/questions/52654935/changing-text-color-to-wix-dialogs(请略读)
    • 我不熟悉如何更改 Visual Studio 安装程序项目中的对话框。商业产品高级安装程序 https://www.advancedinstaller.com and 安装盾 https://www.installshield.com当然可以改变对话框。
  • Services:您正在安装的产品的性质是什么?例如,它有很多服务吗?如果您使用正确的工具来构建 MSI,则可以通过 MSI 表关闭和重新启动服务。
  • 重新安装模式:您的设置是否使用自定义的重新安装模式? (某些设置可能会导致更多重新启动提示)。
  • 自定义卸载程序:您如何调用您的自定义卸载程序?手动还是使用“添加/删除程序”注册卸载命令行? (不推荐后一种方法)。

ARP 小程序与 MSI 对话框: The ARPNOREPAIR property https://learn.microsoft.com/en-us/windows/desktop/msi/arpnorepair在 MSI 本身中设置 - 在属性表中。它只影响 Windows 中看到的内容Add / Remove Programs小程序(ARP = Add / Remove Programs),而不是通过命令行调用 MSI 时看到的内容。然后您会看到该 MSI 本身定义的对话框(这是可以改变的——这并不完全是小事)。

ARP/添加删除程序小程序:下面对该小程序的快速回顾:

  • Hold Windows Key and Tap R. Type: appwiz.cpl and press Enter. This opens the Add /Remove Programs Applet.
  • 选择列表中的不同包条目以查看不同的设置ARPNOREPAIR, ARPNOMODIFY, etc...

    • If ARPNOREPAIR https://learn.microsoft.com/en-us/windows/desktop/msi/arpnorepair在 MSI 的属性表中设置,然后Repair entry不见了。
    • If ARPNOMODIFY https://learn.microsoft.com/en-us/windows/desktop/msi/arpnomodify在 MSI 的属性表中设置,然后Change entry不见了。
    • If ARPNOREMOVE https://learn.microsoft.com/en-us/windows/desktop/msi/arpnoremove在 MSI 的属性表中设置,然后Remove entry不见了。
  • 如果特殊的ARPSYSTEMCOMPONENT property https://learn.microsoft.com/en-us/windows/desktop/msi/arpsystemcomponent如果已设置,则 ARP 中将完全丢失 MSI。

Links:

  • MSI 安装程序未更新正在使用的文件(Visual Studio 安装程序项目) https://stackoverflow.com/questions/51385973/in-use-files-not-updated-by-msi-installer-visual-studio-installer-project/51387298#51387298
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Microsoft Visual Studio 安装程序项目 - 如何向使用 Process.Start() 执行但没有修复选项的 MSI 提供重新启动提示 的相关文章