2

Inno インストール スクリプトで、次のエントリを追加して環境変数を設定しています。

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment.

ユーザーが再起動せずに新しくインストールしたアプリを実行できるようにしたい (通常、環境で上記の変更を確認するために必要です)。

ここで説明されているように、インストーラーが dll を使用してSendMessageTimeOutを呼び出すようにする予定です: Delphi (Win32) から環境変数を設定します

Delphi XE2 では、この API は非推奨であると報告されています。

また、上記の StackOverflow スレッドは、SendNotifyMessageを使用して長い待機を回避することを提案しています。その呼び出しを作成する方法がわかりません。

誰でも構文を教えてもらえますか? それも非推奨ですか?

より良いアプローチに関する提案はありますか?

トム

4

2 に答える 2

7

ChangesEnvironmentディレクティブを確認してください。ドキュメントから:

yes に設定すると、インストールの最後に、セットアップは実行中の他のアプリケーション (特に Windows エクスプローラー) に、レジストリから環境変数を再読み込みする必要があることを通知します。

于 2012-05-18T14:33:58.563 に答える
4

どちらの機能も非推奨ではありません。Delphiは、その宣言SendMessageTimeoutが非推奨であるため、非推奨であると言います。API関数自体は問題ありません。Delphi 以外から呼び出すことになるため、Delphi がその宣言について何を言おうと、あなたには関係ありません。

メッセージの戻り値は実際には気にしないのでSendNotifyMessage、優れた選択肢です。応答をまったく待つことはありませんがSendMessageTimeout、応答を得るために少し待つことになりますが、とにかく無視します。

しかし、Mirtheil の回答が指摘しているように、使用しているインストーラー環境は、環境が変更されたことを他のプログラムに通知する方法を既に提供しているため、手動で行うのではなく、それを使用する必要があります。

于 2012-05-18T16:17:45.957 に答える