更改环境值后,Innosetup SendMessage

时间:2012-09-23 08:22:00

标签: winapi casting inno-setup

我使用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

2 个答案:

答案 0 :(得分:4)

使用ChangesEnvironment指令而不是从脚本代码执行相同操作。来自参考文献:

  

设置为yes时,安装结束时安装程序将通知   其他正在运行的应用程序(尤其是Windows资源管理器)   从注册表重新加载他们的环境变量。

在InnoSetup中,当您使用上述指令时,会在里面调用以下代码:

SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
  LPARAM(PChar('Environment')), SMTO_ABORTIFHUNG, 5000, MsgResult);

答案 1 :(得分:0)

  

使用ChangesEnvironment

适合我。

前:

[Setup]
ChangesEnvironment=yes

小心: 广播消息在“DeinitializeSetup”

的调用之前发生