-3

他の外部実行可能ファイルを起動するために使用される小さなGUIアプリケーションを書いています。1つを除いて、必要なすべての実行可能ファイルで動作します。これが私が使用しているコードです:

CreateProcess(FullPathOfExternalApp.c_str(), NULL, NULL, NULL, false, CREATE_DEFAULT_ERROR_MODE, 0, 0, &siStartupInfo, &piProcessInfo)

外部アプリに、別の実行可能ファイルによる実行を防ぐメカニズムが組み込まれている可能性はありますか?

どうもありがとうございます

4

2 に答える 2

2

最初に最後のシステム エラーを取得し、それをフォーマットしてダンプします。次のようにします。

std::string getSystemErrorMsg()
{
    LPVOID lpMsgBuf;
    ::FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL );

    std::string err = reinterpret_cast<const char *>( lpMsgBuf );

    ::LocalFree( lpMsgBuf );

    return err;
}

CreateProcess が失敗した直後にそのような関数を呼び出し、エラー文字列をOutputDebugString()に渡し、 DebugViewなどを使用して出力を監視します。OS は、期待どおりに動作しない理由を通知することがありますが、常にではありませんが、少なくともそこから始めたいと思います。

于 2011-06-14T15:07:54.833 に答える
1

CreateProcess()プログラムを起動するのに特別なことは何もありません。あなたの問題は他の場所にあります。32 ビット システム上の 64 ビット実行可能ファイル (実行されない) である可能性があり、依存関係が欠落している可能性があり、環境に関連する別のものである可能性があります。最も可能性の高い理由を確認するには、Process Monitor ユーティリティを使用することをお勧めします。

于 2011-06-14T14:17:55.160 に答える