我使用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
?
答案 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”
的调用之前发生