使用Wix安装RabbitMQ,并设置节点名称

问题描述

我正在尝试让安装程序在涉及 RabbitMQ 的地方工作。服务和依赖项都可以毫无问题地安装,但我无法让它识别我在系统环境变量中设置的节点名称核心问题是在第三方部署过程中更改了 PC/主机名,这完全破坏了 Rabbit。

系统环境变量 (RABBITMQ_NODENAME) 是由一个简单的控制台可执行文件在 Wix 引导程序开始时添加的。

我怀疑这是因为安装程序没有得到关于更新变量的备忘录,所以当 RabbitMQ 安装程序稍后在 Wix 链中运行时,它只使用认的 Rabbit 节点名称

我最近尝试解决的问题是在链的末尾有一个额外的控制台可执行文件,它在 Rabbit sbin/ 目录中运行以下命令,以尝试“刷新”Rabbit 安装:


FireRabbitBatchProcess("rabbitmq-service.bat","remove");
FireRabbitBatchProcess("rabbitmq-service.bat","install");
FireRabbitBatchProcess("rabbitmq-service.bat","start");
...
private static void FireRabbitBatchProcess(string fileName,string arg)
{
    string rabbitScriptsPath = @"C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.5\sbin";
    string batchFilePath = Path.Combine(rabbitScriptsPath,fileName);

    if (File.Exists(batchFilePath))
    {
         TryLog("FireRabbitBatchProcess: Running " + batchFilePath + " with argument " + arg);
         Process proc = new Process { StartInfo = new processstartinfo() { FileName = batchFilePath,Arguments = arg } };
         proc.Start();
         proc.WaitForExit(60 * 1000);
    }
    else
    {
         TryLog("FireRabbitBatchProcess: This batch file does not exist! " + batchFilePath);
    }
}

但这似乎也不起作用。但是,如果我在安装后自己运行这些命令,它会正常工作。

是否有一种明显的方法可以安装 Rabbit 并让它使用特定的节点名称,以便 PC 名称更改不会破坏它?

解决方法

听起来您需要有人来实施 5981 - Burn support for WM_SETTINGSCHANGED to refresh environment variables

对于您的额外控制台可执行文件的解决方法,可以查询注册表以获取更新的环境变量并将其传递到您正在创建的子进程 (ProcessStartInfo.Environment)。

理想情况下,bundle 将决定该环境变量的值,并将其传递给需要该信息的每个包,因此您不必依赖环境变量。