2

在 Inno 安装脚本中,我通过添加一个条目来设置环境变量:

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment.

我希望我的用户能够运行新安装的应用程序而无需重新启动(这通常是在环境中看到上述更改所必需的。)

我计划让安装程序使用 dll 来调用SendMessageTimeOut,如此处所述:Set environment variables from Delphi (Win32)

Delphi XE2 报告此 API 已弃用。

上面的 StackOverflow 线程建议使用SendNotifyMessage来避免长时间等待。我不知道如何构造那个调用。

谁能告诉我语法?它也被弃用了吗?

关于更好的方法的任何建议?

汤姆

4

2 回答 2

7

您可能想查看ChangesEnvironment指令。从文档:

当设置为 yes 时,安装程​​序将在安装结束时通知其他正在运行的应用程序(特别是 Windows 资源管理器)它们应该从注册表重新加载其环境变量。

于 2012-05-18T14:33:58.563 回答
4

这两个函数都没有被弃用。Delphi 说SendMessageTimeout已弃用,因为该声明已弃用。API函数本身很好。因为你会从不是 Delphi 的东西中调用它,所以 Delphi 关于它的声明所说的任何内容都与你无关。

由于您实际上并不关心消息的返回值,因此SendNotifyMessage是更好的选择。它根本不会等待响应,而SendMessageTimeout会等待一段时间才能得到响应,无论如何你都会忽略它。

但正如 Mirtheil 的回答所指出的那样,您使用的安装程序环境已经提供了一种通知其他程序环境发生变化的方法,因此您应该使用它而不是尝试手动进行。

于 2012-05-18T16:17:45.957 回答