CreateProcess 命令行参数

CreateProcess command line arguments

我在使用 CreateProcess() 时遇到一些问题。

在这个例子中,CreateProcess() 工作得很好:

bSuccess = CreateProcess(
                TEXT("os-util.exe"), 
                TEXT("os-util.exe 0x273e:0x0007:0x0100 --get-channel"), NULL, NULL, TRUE, 
                0,  
                NULL, szFileName, &si, &pi);

问题是我想修改我通过的命令行。我尝试了一些解决方案,但没有给我任何好的结果。例如:

LPWSTR cmdArgslistSetChannel[] = { TEXT("os-util.exe"), TEXT("0x273e:0x0007:0x0100"), TEXT("--set-channel"), TEXT("11") };
bSuccess = CreateProcess(
                TEXT("os-util.exe"),
                cmdArgslistSetChannel, NULL, NULL, TRUE, 
                0,  
                NULL, szFileName, &si, &pi);
  1. 如何只更改 TEXT("") 的一部分?

  2. 我怎样才能从多个TEXT("")创建命令行?

如果有 none 个选项可用,可以做什么?我想要一个 UI 按钮按下以使用不同的命令行参数调用 CreateProcess()

使用 std::wstring 和字符串连接来动态构建命令行,例如:

std::wstring cmdArgslistSetChannel = L"os-util.exe";
cmdArgslistSetChannel += L" 0x273e:0x0007:0x0100";
cmdArgslistSetChannel += L" --set-channel";
cmdArgslistSetChannel += L" 11";
bSuccess = CreateProcessW(
                L"os-util.exe",
                &cmdArgslistSetChannel[0],
                NULL, NULL, TRUE, 0,  
                NULL, szFileName, &si, &pi);

或者,使用 std::wostringstream 进行构建,然后从中检索 std::wstring

std::wostringstream cmdArgslistSetChannel;
cmdArgslistSetChannel << L"os-util.exe";
cmdArgslistSetChannel << L" " << L"0x273e:0x0007:0x0100";
cmdArgslistSetChannel << L" " << L"--set-channel";
cmdArgslistSetChannel << L" " << L"11";

std::wstring cmd = cmdArgslistSetChannel.str();
bSuccess = CreateProcessW(
                L"os-util.exe",
                &cmd[0],
                NULL, NULL, TRUE, 0,  
                NULL, szFileName, &si, &pi);

无论哪种方式,您都可以根据需要替换任何单个子字符串。