Несколько команд CMD Управляемый c ++ (или c #) - PullRequest
0 голосов
/ 18 июля 2011

Эй, мне просто интересно, будет ли это работать для запуска нескольких команд 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 и не выполняя его.

Ответы [ 2 ]

0 голосов
/ 18 июля 2011

Это не сработает.Этот код:

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");

Конечно, вы захотитедобавить обработку ошибок и т. д., особенно в случае, когда текущий процесс не имеет необходимых разрешений.

0 голосов
/ 18 июля 2011

Код, который вы написали, делает то, что кажется.Сначала он устанавливает 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() после того, как вы начнете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...