【问题标题】:MSI creation: Terminate application before upgradingMSI 创建:升级前终止应用程序
【发布时间】:2011-02-27 15:50:48
【问题描述】:

我正在使用 Microsoft Visual Studio 2010 为我的简单 .EXE 应用程序创建一个简单的 .MSI 安装程序。

问题是,如果您在 .EXE 仍在运行时安装升级,就会出现问题(直到重新启动)。

我希望 .MSI 安装程序在安装/升级之前终止我的进程。

请有人告诉我如何在 Orca 中执行此操作?

编辑:我已经看到由于我的 .EXE 正在使用而发生这种情况,但我也看到它是因为 .CHM 帮助文件在升级时也是打开的,因此仅任何进程终止是不够的来解决这个问题。

【问题讨论】:

    标签: visual-studio-2010 windows-installer orca


    【解决方案1】:

    您应该将MsiRMFilesInUse Dialog 添加到您的安装程序中。

    【讨论】:

    • 这会检测到我的帮助文件是否打开?
    • 如文档中所述:“可以创建 MsiRMFilesInUse 对话框以显示当前正在运行的文件的进程列表,这些文件需要被安装覆盖或删除。”您可以依赖RestartManager 发布事件以安全地关闭您的应用程序。但是,此对话框可用于 Windows 安装程序 4.0 或更高版本。对于较低版本,您可以使用 FilesInUse 对话框。
    • 我到处找,但找不到有关如何将内置对话框添加到设置的帮助。你能帮我吗 ?我说的是 VS 安装程序
    • 我认为您不能在 VS 安装程序中执行此操作。这是一种基本的。
    【解决方案2】:

    您可以尝试创建一个custom action 来停止您的应用程序(您编写的自定义 EXE 或 DLL)。例如,您可以将 WM_CLOSE 发送到主应用程序窗口(您的应用程序应该处理此消息)。

    此自定义操作应安排在 InstallExecuteSequence 表中的 InstallValidate 操作之前。

    【讨论】:

    • 谢谢,根据我的编辑,这个答案还不够。但是因为它确实直接回答了我原来的问题,所以这里是+1。下一次,我将专注于我的问题,而不是我对答案的想法。
    【解决方案3】:

    您可以编写一个自定义操作来关闭您的应用程序以及您的帮助文件。

    您应该能够使用 FindWindow 找到这两个窗口句柄: http://msdn.microsoft.com/en-us/library/ms633499(v=vs.85).aspx

    对于可执行文件,您应该能够为 FindWindow 使用适当的窗口类或标题。 对于帮助文件,您应该能够为 FindWindow 使用适当的帮助窗口标题。

    我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 2012-02-23
      相关资源
      最近更新 更多