7

Windows 7 の新しい環境で、Windows XP のレガシ コードをコンパイルしようとしています。コンパイルはできますが、実行時に失敗します。

CreateProcess() は 0 を返し、GetLastError() は 2 を返します。これは ERROR_FILE_NOT_FOUND を表します。

これが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 を実行すると、calc がポップアップします。コマンド プロンプトのどこからでもコマンド ラインにあるものを実行できるので、c:\windows\system32 への %PATH% が認識され、正しく動作することがわかります。

ansi 文字列で CreateProcessA を強制しようとしましたが、同じ結果が得られました。また、デバッグおよびリリース構成とコマンドラインからも試しました。

何か案が?

編集: calc.exe と tftp.exe の両方が、システム パスにある c:\windows\system32 にあります。
「c:\windows\system32\tftp」を実行しても機能しません

4

1 に答える 1