有一个 InstallShield 安装程序
它写入新的环境变量
HKEY_LOCAL_MACHINE\系统\当前控制集\控制\会话管理器\环境
和呼叫
发送消息超时(HWND_BROADCAST、WM_SETTINGCHANGE,...
它还会在"开始"菜单中
创建快捷方式但是安装后它们立即不起作用,因为程序需要新的变量。
安装程序通常要求重新启动系统,
但是在某些配置中并非如此,并且意外发现了此问题。
我用谷歌搜索了一下,原因可能是在 UAC 和 UIPI 中:
安装程序以提升方式运行,消息不会发送到用户的窗口
和"开始"菜单快捷方式也不知道新变量
只有在注销登录后,它们才会开始工作
所以问题来了:
是否可以广播到所有用户的窗口?
我很惊讶,看起来很奇怪,"广播"不是真正的广播
还是我错过了什么?
顺便说一句,福尔
如果打开
UAC,Visual Studio Spy++消息监视器似乎不起作用
...哎呀,我找到了解决方案
只需运行 NIRCMD 系统刷新环境
-SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, pEnv, 0, 333, pRes);
+LaunchApplication(SUPPORTDIR ^ "nircmd.exe", "sysrefresh environment", SUPPORTDIR, SW_HIDE, INFINITE, LAAW_OPTION_WAIT);
所以这是安装盾
中的错误闭。