如何将窗口消息从提升的安装程序进程广播到用户窗口?

时间:2015-01-30 15:23:08

标签: uac sendmessage elevated-privileges uipi

有一个InstallShield安装程序
它写了新的环境变量 HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment
并打电话给 SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,...
它还会在“开始”菜单中创建快捷方式 但是在安装后它们不起作用,因为程序需要新的变量
安装程序通常要求重新启动系统,
但在某些配置中却没有,这个问题是偶然发现的
我用Google搜索,原因可能是UAC和UIPI:
安装程序运行提升,消息不会到达用户的窗口
和开始菜单快捷方式也不知道新的变量
只有在注销登录后,他们才能工作
所以问题是:
是否可以向所有用户的窗口广播?
我很惊讶,“广播”不是真正的广播,这看起来很奇怪 或者我错过了什么?
BTW
如果打开UAC,似乎Visual Studio Spy ++消息监视器不起作用

1 个答案:

答案 0 :(得分:0)

...哎呀,我找到了解决办法 只需运行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中出现了问题 闭合。