我目前正在开发一个程序,以立即清除出现在 Windows开始->运行对话框中的先前运行命令列表。通过删除HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU键清除此列表的过程有据可查;但是,在这些更改生效之前,似乎有必要执行以下操作之一:
- 重新启动计算机
- 选择开始->关闭,然后选择取消。
这些都不是我想要完成的任务的理想选择:#1 对用户极具破坏性,而#2 似乎需要额外的用户交互。
有谁知道如何在不需要任何用户交互的情况下立即(并以编程方式)强制重新加载此信息,同时最大限度地减少对用户其他活动的干扰? 我希望在执行我的程序后立即清除用户的运行历史记录,而不需要他们采取任何进一步的行动(例如使用上面#2中的“关闭”->“取消”技巧)或强制重新启动.
或者,从不同的角度解决问题:单击Start -> Shut Down -> Cancel时,Windows 资源管理器会重新加载 RunMUI 键。 有没有办法在不让用户选择Shut Down然后Cancel的情况下强制进行类似的重新加载?
我已经尝试过的事情:
- 使用procmon监视 explorer.exe 状态,同时选择Shutdown然后Cancel。我看到 Explorer 正在写入 RunMRU 键,但无法确定是什么触发了这个。
- 许多谷歌搜索“重新加载 runmru 而不重新启动”。大多数结果仍然推荐上面的方法#1,尽管少数结果建议#2。
- 有限的 MSDN API 检查。RegFlushKey调用看起来很有希望,但我以前从未使用过它,所以我不知道它是否适用于不同进程缓存的注册表信息。
任何建议或其他信息将不胜感激。