【问题标题】:Prevent multiple installations of the WiX bundle. It should prevent running while another installation of the same bundle is running防止多次安装 WiX 捆绑包。它应该防止在同一捆绑包的另一个安装正在运行时运行
【发布时间】:2021-08-12 10:17:50
【问题描述】:

现在我有 Wix 包,它安装了 .NET 和 VC++ 作为 pre-req 以及我的其他 MSI。但问题是如果我运行一次,然后在第一个已经运行时再次运行,它不会停止安装。 (不阻止多个安装实例) 我正在使用 BURN。蜡烛和光。 对不起,我是新手,希望得到帮助。 我希望它只运行一次,并可能显示“另一个安装正在运行”消息。 非常感谢帮助,在这个特定问题上停留了太久。

【问题讨论】:

  • 您使用的是标准引导程序还是自定义程序?
  • 标准引导程序。
  • 我知道怎么做,但仅限于自定义。如果需要可以分享
  • 任何帮助将不胜感激......请分享......谢谢

标签: xml wix windows-installer bootstrapper


【解决方案1】:

至于我,你可以尝试两种方法:

  1. 自定义操作:

只需在链中首先添加您的 msi,然后添加自定义操作并检查 msi 启动。 Here 您可以找到自定义操作示例。而here 你可以在开始时找到如何运行它。这种方式既简单又快捷。

  1. 自定义引导程序:

这种方法有点长而且有点难,但也可以。 首先,您需要创建自己的自定义引导程序。 Here's 很好的分步指南。

之后您只需在引擎运行前添加检查即可。它看起来像这样:

public class CustomBootstrapperApplication : BootstrapperApplication
{

   /// <summary>
   /// Entry point of managed code
   /// </summary>
   protected override void Run()  
   {
      if (Process.GetProcessesByName("process_name").Length > 0)
      {
         MessageBox.Show("process_name is already running");
         //not sure messagebox will be good idea here according to MVVM, 
         //but I guess you'll find way to solve it or... it will work anyway)))
      }
      //all that engine management stuff
   } 
}

一点点开销,但结果你会得到你自己的 WPF 引导程序和你想要的 UI。

【讨论】:

  • 这看起来确实有效。我很抱歉,但我正在使用我认为的 BURN 方法。我在 XML 文件中编写脚本并使用带有扩展名的 Candle 和 Light...
  • 但至少您有可以更改的 msi?或者它不是wix msi?对于第二个选项,一切都将相同 - 您将编写 xml 并使用 Candle 进行刻录,但您将拥有另一个项目作为 UI 包装器
  • MSI 不是 Wix MSI。我有一组我直接捆绑的 MSI。我可以在 bundle.wxs 中使用一些条件或任何其他东西吗?或者其他类似的东西?谢谢....
  • 对不起,我不知道引导程序中是否有任何条件和对话框。好像没有。您可以随时添加新的 msi 来运行该检查 - 这是最简单的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 2012-12-16
  • 1970-01-01
相关资源
最近更新 更多