5

InnoSetup を使用して、レジストリに環境変数を設定しました。

[Registry]
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; ValueName: "MY_PROGRAM_HOME_DIR"; ValueData: "{app}"

しかし、私が呼び出すまで、システムはこの変数を見ることができませんSendMessage

[Code]
procedure DeinitializeSetup();
begin
  // HWND_BROADCAST = $FFFF 
  // WM_SETTINGCHANGE = $001A
  SendMessage($FFFF, $001A, 0, Longint(PChar('Environment')));
end;

InnoSetup 言います:

... 列 60: タイプの不一致

InnoSetup スクリプトで正しくタイプキャストPCharするにはどうすればよいですか?Longint

4

2 に答える 2

6

ChangesEnvironmentスクリプト コードから同じことを行う代わりに、ディレクティブを使用してください。参照から:

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

InnoSetup では、上記のディレクティブを使用すると、内部で次のコードが呼び出されます。

SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
  LPARAM(PChar('Environment')), SMTO_ABORTIFHUNG, 5000, MsgResult);
于 2012-09-23T08:26:29.217 に答える
2

ChangesEnvironment を使用する

私のためにうまく働いてください。

元:

[Setup]
ChangesEnvironment=yes

注意: ブロードキャスト メッセージは、'DeinitializeSetup' の呼び出しの前に発生します。

于 2014-06-04T10:20:27.240 に答える