bar*_*ris 5 winapi casting inno-setup
我使用 InnoSetup 在注册表中设置环境变量:
[Registry]
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; ValueName: "MY_PROGRAM_HOME_DIR"; ValueData: "{app}"
Run Code Online (Sandbox Code Playgroud)
但是系统无法看到这个变量,直到我调用SendMessage.
[Code]
procedure DeinitializeSetup();
begin
// HWND_BROADCAST = $FFFF
// WM_SETTINGCHANGE = $001A
SendMessage($FFFF, $001A, 0, Longint(PChar('Environment')));
end;
Run Code Online (Sandbox Code Playgroud)
InnoSetup 说:
... 第 60 列:类型不匹配
我该如何正确的类型转换PChar成Longint在InnoSetup脚本?
使用ChangesEnvironment指令而不是从脚本代码中执行相同操作。从参考:
当设置为 yes 时,安装程序会在安装结束时通知其他正在运行的应用程序(特别是 Windows 资源管理器),它们应该从注册表重新加载它们的环境变量。
在 InnoSetup 中,当你使用上面的指令时,里面会调用下面的代码:
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
LPARAM(PChar('Environment')), SMTO_ABORTIFHUNG, 5000, MsgResult);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1636 次 |
| 最近记录: |