2012-03-16 17 views
2

私は別のプロセスからプロセスを起動しようとしています。これが達成されるメカニズムは変更されることはありません。ランチャーと元のプロセスはどちらも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から始めます。

+2

statupInfo.lpDirectoryを "c:\\ dir"に設定してください – Lucian

+0

@Lucianできません。ディレクトリが変わるかもしれないので 'cmd'から始めています。 –

+0

なぜPATH変数を使いこなすのでしょうか? cmdファイルが起動される実行ファイルの場所を知っている場合、コマンドライン上のランチャーへのパラメータとして実行ファイルへのパスを渡すのはなぜですか? 'launcher.exe c:\ dir \ child.exe' – WaffleSouffle

答えて

6

はMSDN、CreateProcess関数によると、実際に検索パスを行いますが、lpApplicationNameNULLで、実行ファイルがlpCommandLineの最初のトークンである場合のみ。言い換えれば
それべきあなたは私がYMMVようにように、しかし、それを試していないCreateProcess(NULL, "child.exe", ...

を呼び出す場合作品。

+0

これは、ありがとう、ありがとう。 –

0

ランチャープロセスは、GetModuleFileName()を使用して独自のパスを取得し、2番目の実行可能ファイルへのフルパスを作成できます。 Path環境変数を変更したり、作業指示を変更したりする必要はありません。

+0

2つは必ずしも同じディレクトリにあるとは限りません。スクリプトによってPATHに設定されたディレクトリにあります。 –

+0

あなたは「ランチャーと元のプロセスはどちらもC:\ dirにあります」と言っています – Deanna

+0

残念です。彼らは今ですが、必須ではありません。 –

関連する問題