0

自分自身を更新できるようにする必要があるプログラムがあります。更新、ダウンロード、インストールを実行する2番目のプログラムがあります。アップデータは明らかにメインプログラムを更新できる必要があり、そのためにメインプログラムを実行することはできません。そのため、メインプログラムにを呼び出してアップデータを起動させたいのですShellExecuteEx、MSDNのドキュメントで少し混乱しています。

それはそれを言います:

ShellExecuteExが戻った直後に...プロセスが終了する場合は、SEE_MASK_NOASYNCフラグを指定する必要があります。このような状況では、呼び出し元のスレッドはDDE会話を完了するために使用できないため、呼び出し元のアプリケーションに制御を戻す前に、ShellExecuteExが会話を完了することが重要です。会話を完了できないと、ドキュメントの起動に失敗する可能性があります。

そして、の下SEE_MASK_NOASYNCShellExecuteEx、操作が完了するまで呼び出しが戻らないことを示します。アップデータを起動してすぐにメインプログラムを終了し、アップデータを問題なく実行できるようにしたいのです。それは正しい方法ですか?また、起動されたアップデーターが、メインプロセスがシャットダウンしたときに強制終了される「子プロセス」としてマークされないようにするために、特別なことをする必要がありますか?

4

3 に答える 3

4

ShellExecute を呼び出す必要がありますか? 同様のことを行い、CreateProcess を介して起動すると、正常に動作します。

(実際には、バッチ ファイルを実行する cmd.exe が起動されます。バッチ ファイルが待機し、アップデーターが起動して終了するのを待ち、少し待機してから、メイン アプリを再度起動します。問題はありませんでした)

于 2012-09-15T15:16:36.500 に答える
1

DDE を使用して EXE を直接起動することはありません。(特定の種類のファイルをそのように起動する必要があると登録されている場合にのみ使用されます。EXE を名前で実行しているだけの場合、DDE は関係ありません。)

そのため、SEE_MASK_NOASYNC を指定する必要があります (ShellExecuteEx 呼び出しが必要なすべての処理を完了し、呼び出しが戻るとすぐにアプリが自由にスレッドを終了できるようにするため)、API は非常に迅速に戻る必要があります。

于 2012-09-11T20:22:29.103 に答える
0

アップデーターの起動に関する CodeProject の優れた記事は次のとおりです

于 2012-09-23T04:29:32.120 に答える