2

我一直在尝试使用 C# 代码启用 RabbitMQ 管理插件。

通过使用以下代码,我成功地使用 c# 安装了 RabbitMQ 服务器。

        RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();

        Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
        runspace.Open();

        RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);

        Pipeline pipeline = runspace.CreatePipeline();

        Command myCommand = new Command("Start-Process");


        CommandParameter testParam = new CommandParameter("FilePath", @"C:\Users\saadp\Desktop\Dependencies\rabbitmq-server-3.8.3.exe");
        CommandParameter testParam2 = new CommandParameter("ArgumentList", new string[] { "/S" });
        CommandParameter testParam3 = new CommandParameter("Wait");

        myCommand.Parameters.Add(testParam);
        myCommand.Parameters.Add(testParam2);
        myCommand.Parameters.Add(testParam3);

        pipeline.Commands.Add(myCommand);

        var results = pipeline.Invoke();

但是,当我尝试使用以下 CommandParameters 启用 RabbitMQ 管理插件时,它不会影响任何东西。实际发生的是在执行此代码后,新的命令提示符会以一小部分的方式打开和关闭。

这是我尝试过的代码。

        CommandParameter testParam = new CommandParameter("FilePath", @"""C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.3\sbin\rabbitmq-plugins.bat""");
        CommandParameter testParam2 = new CommandParameter("ArgumentList", new string[] { "'enable rabbitmq_management'" });
        CommandParameter testParam3 = new CommandParameter("Wait");
4

2 回答 2

2

我通过遵循此代码得到了这个工作。

private static string RunScript(string scriptText)
    {
        // create Powershell runspace

        Runspace runspace = RunspaceFactory.CreateRunspace();

        // open it

        runspace.Open();

        // create a pipeline and feed it the script text

        Pipeline pipeline = runspace.CreatePipeline();
        pipeline.Commands.AddScript(scriptText);

        // add an extra command to transform the script
        // output objects into nicely formatted strings

        // remove this line to get the actual objects
        // that the script returns. For example, the script

        // "Get-Process" returns a collection
        // of System.Diagnostics.Process instances.

        pipeline.Commands.Add("Out-String");

        // execute the script

        pipeline.Invoke();

        // close the runspace

        runspace.Close();
    }
于 2020-07-31T06:31:56.890 回答
0

尝试这个:

        var startInfo =
            new ProcessStartInfo
            {
                FileName = @"C:\Windows\System32\cmd.exe",
                Arguments = "/c rabbitmq-plugins enable rabbitmq_management",
                WorkingDirectory = @"C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.11\sbin",
                WindowStyle = ProcessWindowStyle.Maximized
            };

        Process.Start(startInfo)?.WaitForExit();
        Process.Start("net", "stop RabbitMQ")?.WaitForExit();
        Process.Start("net", "start RabbitMQ")?.WaitForExit();
于 2020-07-31T06:13:22.313 回答