0

有一个 InstallShield 安装程序
,它写入新的环境变量
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
并调用
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE,...
它还在“开始”菜单中创建快捷方式,
但安装后它们不起作用因为程序需要新变量。

安装程序通常会要求系统重新启动,
但在某些配置中它不会,并且这个问题是偶然发现的。

我用谷歌搜索可能原因是在 UAC 和 UIPI 中:
安装程序运行提升并且消息没有来到用户的窗口
和开始菜单快捷方式也不知道新变量
只有在注销登录后它们才能工作

所以问题是:
是否可以广播到所有用户的窗口?

我很惊讶,看起来很奇怪,“广播”不是真正的广播
还是我错过了什么?

顺便说一句
,如果打开 UAC,Visual Studio Spy++ 消息监视器似乎不起作用

4

1 回答 1

1

...哎呀,我找到了解决方案
,只需运行 nircmd sysrefresh 环境

-SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, pEnv, 0, 333, pRes);
+LaunchApplication(SUPPORTDIR ^ "nircmd.exe", "sysrefresh environment", SUPPORTDIR, SW_HIDE, INFINITE, LAAW_OPTION_WAIT);

所以在 InstallShield
关闭时出现问题。

于 2015-02-04T13:49:32.113 回答