Windows XPの新しい環境でWindows XPのレガシーコードをコンパイルしようとしていますが、実行時にコンパイルされますが失敗します。Windows 7でCreateProcessが失敗する
のCreateProcess()は0を返すし、GetLastError()ここではERROR_FILE_NOT_FOUND
の略、2を返すには、CreateProcessを
奇妙ため今STARTUPINFO StartInfo;
memset(&StartInfo, 0, sizeof(StartInfo));
wcsncpy(astrCommandLine, L"TFTP", MAX_OSCOMMANDLINE_SZ-1);
BOOL bFuncRetn = CreateProcess(NULL,
astrCommandLine, // command line
NULL, // process security attributes
NULL, // primary thread security attributes
NULL, // handles are inherited
0, // creation flags
NULL, // use parent's environment
NULL, // use parent's current directory
&StartInfo, // STARTUPINFO pointer
&m_ProcInfo); // receives PROCESS_INFORMATION
に私の呼び出しです:代わりに、TFTPの私はカルクを実行すると、 calcがポップアップします。コマンドプロンプトのどこからでも私のコマンドライン上にあるものを実行できますので、%PATH%to c:\ windows \ system32はわかっていて正しく動作します。
私はAnsi文字列でCreateProcessAを強制しようとしましたが、同じ結果が得られました。私はまた、デバッグとリリースの設定とコマンドラインから試しました。
EDIT: calc.exeとtftp.exeの両方は、システムパスにあるc:\ windows \ system32にあります。
"c:¥windows¥system32¥tftp"が動作しない
システムパスではなくアプリケーションパスによってtftpが検出されていますか?それはcalcが見つかったがtftpが見つからない理由を説明するかもしれない。 CreateProcessはApp Pathsを使用しません。私はあなたがどこかでStartInfo.cbを設定していると仮定しています。 –
これがうまくいくという希望はほとんどありません。確かに、tftp.exeはプログラムのデフォルトの作業ディレクトリにありません。 Calc.exeは問題ではなく、PATHにあります。 c:\ foo \ bar \ tfpt.exeのように、.exeの*フル*パス名を渡します。 –
私はStartInfo.cbについて聞いたことがありません – Eric