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 回答