関連する質問: CreateProcess はコマンド ライン引数を渡しません。
CreateProcess (および/または ShellExecuteEx) を使用する場合、EXE に引数を渡す場合とパラメーターを渡す場合に違いはありますか?
私は次のようなものを呼び出そうとしています:
myExe.exe /myparam
次のようなコードで:
TCHAR Buffer[MAX_PATH];
DWORD dwRet;
dwRet = GetCurrentDirectory(MAX_PATH, Buffer);
CString sCmd;
sCmd.Format ( "%s\\%s", Buffer, command);
CString sParam( "/myparam" );
sCmd += " " + sParam;
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
if (CreateProcess( NULL, sCmd.GetBuffer() , NULL, NULL, TRUE, 0, NULL, Buffer, &si, &pi))
{
::WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
else
{
LPVOID lpMsgBuf = NULL;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
CString msg;
msg.Format("Failed to start command line (error: %s) : %s\n",lpMsgBuf,sCmd);
AfxMessageBox(msg);
LocalFree(lpMsgBuf);
}
他のスレッドとMSDNから私が理解していることから、それは適切に機能し、パラメーターを使用してEXEを呼び出す必要があるということです。「/myparam」を追加せずに上記のコードを実行すると、正常に機能します。
コマンド ラインとエクスプローラーから (ショートカットを作成し、ターゲット名に /myparam を追加して) EXE を試しましたが、問題なく動作しています。