【问题标题】:Multiple CMD commands Managed c++ (or c#)多个 CMD 命令托管 c++(或 c#)
【发布时间】:2011-07-18 00:02:24
【问题描述】:

嘿,我只是想知道这是否适用于运行多个 CMD 命令?我还没有测试过这个。

//multiple commands
System::Diagnostics::Process ^process = gcnew System::Diagnostics::Process();
System::Diagnostics::ProcessStartInfo ^startInfo = gcnew System::Diagnostics::ProcessStartInfo();
//startInfo->WindowStyle = System::Diagnostics::ProcessWindowStyle::Hidden;
startInfo->FileName = "cmd.exe";
startInfo->Arguments = "/C powercfg -attributes SUB_PROCESSOR 12a0ab44-fe28-4fa9-b3bd-4b64f44960a6 -ATTRIB_HIDE";
startInfo->Arguments = "/C powercfg -attributes SUB_PROCESSOR 40fbefc7-2e9d-4d25-a185-0cfd8574bac6 -ATTRIB_HIDE";
process->StartInfo = startInfo;
process->Start();

或者startInfo 一次只能处理一个参数?如果是这样,我将如何在不创建 .bat 文件并执行该文件的情况下执行多个命令。

【问题讨论】:

  • 不相关,但我总是想知道人们如何通过多行代码拖动变量名中的拼写错误,甚至没有注意到...
  • @Joey,在使用 IntelliSense 时非常容易。如果英语不是您的母语,这也无济于事。
  • svick:啊,我忘了智能感知;现在在文本编辑器中输入我的大部分代码。

标签: c# c++ cmd


【解决方案1】:

这行不通。这段代码:

stratInfo->Arguments = "/C powercfg -attributes SUB_PROCESSOR 12a0ab44-fe28-4fa9-b3bd-4b64f44960a6 -ATTRIB_HIDE";
stratInfo->Arguments = "/C powercfg -attributes SUB_PROCESSOR 40fbefc7-2e9d-4d25-a185-0cfd8574bac6 -ATTRIB_HIDE";

不设置两个参数。它设置参数字符串,然后覆盖它。

如果要运行两次,则必须执行以下操作:

void RunProc(System::String ^arguments)
{
    System::Diagnostics::Process ^process = gcnew System::Diagnostics::Process();
    System::Diagnostics::ProcessStartInfo ^startInfo = gcnew System::Diagnostics::ProcessStartInfo();
    startInfo->FileName = "cmd.exe";
    startInfo->Arguments = arguments;
    process->StartInfo = startInfo;
    process->Start();

}

RunProc("/C powercfg -attributes SUB_PROCESSOR 12a0ab44-fe28-4fa9-b3bd-4b64f44960a6 -ATTRIB_HIDE");
RunProc("/C powercfg -attributes SUB_PROCESSOR 40fbefc7-2e9d-4d25-a185-0cfd8574bac6 -ATTRIB_HIDE");

当然,您需要为此添加错误处理等,尤其是在当前进程没有正确权限的情况下。

【讨论】:

  • 啊,这更有意义,至于这种情况下的错误处理,您的意思是要求用户允许这些命令运行吗? (管理员权限?)
  • 对于错误处理,我的意思是将对 process->Start() 的调用包装在 try/catch 块中,并根据发生的情况通知用户以管理员身份运行应用程序。您可以在此处了解有关以管理员权限运行的更多信息:stackoverflow.com/questions/6412896/…
  • 如果这回答了您的问题,请不要忘记接受它! =)
【解决方案2】:

您编写的代码执行了它看起来应该执行的操作。它首先将Arguments 设置为一个值,然后用另一个值覆盖它。所以Start() 只执行第二条命令。

我建议创建一个辅助函数(或方法):

void RunPowerCfg(System::String ^id)
{
    System::Diagnostics::Process ^process = gcnew System::Diagnostics::Process();
    System::Diagnostics::ProcessStartInfo ^startInfo =
        gcnew System::Diagnostics::ProcessStartInfo();
    startInfo->FileName = "cmd.exe";
    startInfo->Arguments = System::String::Format(
        "/C powercfg -attributes SUB_PROCESSOR {0} -ATTRIB_HIDE", id);
    process->StartInfo = startInfo;
    process->Start();
}

void main()
{
    RunPowerCfg("12a0ab44-fe28-4fa9-b3bd-4b64f44960a6");
    RunPowerCfg("40fbefc7-2e9d-4d25-a185-0cfd8574bac6");
}

根据您要执行的操作,您可能需要在启动后致电process->WaitForExit()

【讨论】:

    猜你喜欢
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    相关资源
    最近更新 更多