Innosetup SendMessage函数改变环境后的值(Innosetup SendMessa

2019-09-22 20:14发布

我用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:类型不匹配

如何正确地强制转换PCharLongint在InnoSetup脚本?

Answer 1:

使用ChangesEnvironment指令,而不是从你的脚本代码做同样的。 从参考:

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

在InnoSetup,当你使用上面的指令中,下面的代码被称为内:

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


Answer 2:

使用ChangesEnvironment

我很好地工作。

例如:

[Setup]
ChangesEnvironment=yes

小心:“DeinitializeSetup”的调用之前的广播消息出现



文章来源: Innosetup SendMessage after changing the environment values