0

CreateProcess を介して別のアプリを呼び出すアプリに取り組んでいます。私はWin7 64ビットを使用しています。呼び出されたアプリは、パイプを介してデータを受信するコンソールです。呼び出しコードは次のようになります。

STARTUPINFOA si;
PROCESS_INFORMATION pi;
GetStartupInfoA(&si);
memset( &si, 0, sizeof(STARTUPINFOA) );
memset( &pi, 0, sizeof(pi) );
si.cb = sizeof(STARTUPINFOA);
char cmdline[MAX_PATH];
sprintf(cmdline,"\"%s\" %s",AppToCallName,PipeName);
BOOL bRet = CreateProcessA(NULL,cmdline,NULL,NULL,FALSE,CREATE_NEW_CONSOLE|CREATE_BREAKAWAY_FROM_JOB,NULL,NULL,&si,&pi);

私のコンピューター (2 台で試しました) では、動作します。他のものでは、(bRet=)FALSE を返し、GetLastError() は 5 を返します。これは ACCESS_DENIED を意味します。

どこに問題があるのか​​ わかりません。そして悪いことに、それは私にとってはうまくいくので、デバッグすることはできません!

私のセットアップは次のとおりです。

  • Win7 プロ 64 ビット SP1

  • VStudio 2005 SP1

  • (使用コンパイラ: Intel C++ 9.1

必要に応じて、より多くのセットアップ情報を提供させていただきます。

何か案が?

4

1 に答える 1

0

CreateProcess呼び出しプロセスと同じパーミッションを使用し、プロセスが適切に初期化されていない場合はプロセスも終了するため、CreateProcess成功が返された場合でもプロセスが起動されるのを待って確認する必要があります。ただし、アクセス拒否の問題は、ターゲット マシンで起動しようとしていたアプリケーションに対して、呼び出しプロセスが実行権限または書き込み権限を持っていないことに関連している可能性があります。

GetLastError関数がいつ成功するかに加えてGetExitCodeProcess、それがおそらく次の問題になるのでチェックしてください。

参照用にも: http://msdn.microsoft.com/en-us/library/ms682425(v=vs.85).aspx

于 2011-09-08T17:39:17.377 に答える