私は別のプロセスからプロセスを起動しようとしています。これが達成されるメカニズムは変更されることはありません。ランチャーと元のプロセスはどちらもC:\dir
にあります。`cmd`ファイルから開始したプロセスからのCreateProcess
cmd
ファイルからランチャーを起動しています。 cmd
ファイル自体はどこか別の場所に配置され、それがランチャーの実行可能ファイルを見つけるために、私はPATH
変数に設定しています:
STARTUPINFO startupInfo;
startupInfo.cb = sizeof (STARTUPINFO);
startupInfo.lpReserved = 0;
startupInfo.lpDesktop = NULL;
startupInfo.lpTitle = NULL;
startupInfo.dwX = 0;
startupInfo.dwY = 0;
startupInfo.dwXSize = 0;
startupInfo.dwYSize = 0;
startupInfo.dwXCountChars = 0;
startupInfo.dwYCountChars = 0;
startupInfo.dwFillAttribute = 0;
startupInfo.dwFlags = _showInForeground ? STARTF_USESHOWWINDOW : 0;
startupInfo.wShowWindow = _showInForeground ? 1 : 0;
startupInfo.cbReserved2 = 0;
startupInfo.lpReserved2 = 0;
PROCESS_INFORMATION processInfo;
BOOL retVal = CreateProcess("child.exe", "", NULL, NULL, FALSE,
_showInForeground ? (CREATE_NEW_CONSOLE | CREATE_DEFAULT_ERROR_MODE) : CREATE_DEFAULT_ERROR_MODE,
NULL, NULL, &startupInfo,&processInfo);
:
set PATH=C:\dir;%PATH%;
launcher.exe
ランチャーは、次のコードを使用して子プロセスを開始します
0
を返し、最後のエラーは2
です。これはFile not found
です。
GetCurrentDirectory
は、cmd
が存在するディレクトリを返します。C:\dir
ではありません。私はCreateProcess
はPATHが利用できないのでchild.exe
が見つからないと推測しています。
これを動作させる方法はありますか?
EDIT:答えといくつかの良いコメント(コメントは時々見落とされて):
提案:設定statupInfo.lpDirectoryに "C:\ DIR"
回答:できません。ディレクトリが変更される可能性があるので、私はcmdから始めます。
statupInfo.lpDirectoryを "c:\\ dir"に設定してください – Lucian
@Lucianできません。ディレクトリが変わるかもしれないので 'cmd'から始めています。 –
なぜPATH変数を使いこなすのでしょうか? cmdファイルが起動される実行ファイルの場所を知っている場合、コマンドライン上のランチャーへのパラメータとして実行ファイルへのパスを渡すのはなぜですか? 'launcher.exe c:\ dir \ child.exe' – WaffleSouffle