G93*_*G93 1 c c++ shellexecute runtime.exec shellexecuteex
我有一个需要 2 个参数的 .exe。我需要在运行时在我的程序之间运行 .exe 文件。我曾经ShellExecuteEx
运行过 .exe 文件,但它没有接受参数。请帮助我哪里出错了。我在下面发布我的代码。
void StartProgram() {
SHELLEXECUTEINFO lpExecInfo;
lpExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
lpExecInfo.lpFile = L"F:\\EXEFolder\\RunMe.exe"; // Path to the .exe
lpExecInfo.fMask = SEE_MASK_DOENVSUBST | SEE_MASK_NOCLOSEPROCESS;
lpExecInfo.hwnd = NULL;
lpExecInfo.lpVerb = L"open"; // to open program
lpExecInfo.lpParameters = L"D:/input.csv" "F:/output.csv;"; //Arguments to be passed to .exe
lpExecInfo.lpDirectory = NULL;
lpExecInfo.nShow = SW_SHOW;
lpExecInfo.hInstApp = (HINSTANCE)SE_ERR_DDEFAIL;
ShellExecuteEx(&lpExecInfo);
//wait until a file is finished printing
if (lpExecInfo.hProcess != NULL)
{
::WaitForSingleObject(lpExecInfo.hProcess, INFINITE);
::CloseHandle(lpExecInfo.hProcess);
}
}
Run Code Online (Sandbox Code Playgroud)
这 lpParameters
成员是指向以空格分隔的参数字符串的指针,就像您在命令行环境中传递它们一样。
如果你想向程序传递两个参数,你可以这样做
lpExecInfo.lpParameters = L"argument1 argument2";
Run Code Online (Sandbox Code Playgroud)
对于你的情况,它应该像
lpExecInfo.lpParameters = L"D:/input.csv F:/output.csv";
Run Code Online (Sandbox Code Playgroud)
为了解释你做错了什么,C++ 编译器有一个阶段,它将相邻的字符串文字连接成一个字符串。这意味着L"D:/input.csv" "F:/output.csv;"
将被连接成L"D:/input.csvF:/output.csv;"
其为单一的参数。