Delphi 在安装程序中使用SendNotifyMessage

Delphi 在安装程序中使用SendNotifyMessage,delphi,winapi,inno-setup,Delphi,Winapi,Inno Setup,在Inno安装脚本中,我通过向以下内容添加条目来设置环境变量: Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment. 我希望我的用户能够在不重新启动的情况下运行新安装的应用程序(这通常是在环境中看到上述更改所必需的) 我计划让安装程序使用dll调用SendMessageTimeOut,如下所述: Delphi XE2报告此API已弃用 上面的StackOverflow线

在Inno安装脚本中,我通过向以下内容添加条目来设置环境变量:

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment.
我希望我的用户能够在不重新启动的情况下运行新安装的应用程序(这通常是在环境中看到上述更改所必需的)

我计划让安装程序使用dll调用SendMessageTimeOut,如下所述:

Delphi XE2报告此API已弃用

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

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

对更好的方法有什么建议吗


Tom

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

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


这两个函数都不推荐使用。Delphi说,
SendMessageTimeout
已被弃用,因为该声明已被弃用。API函数本身很好。因为你会从非Delphi的东西中调用它,所以Delphi对它的声明所说的任何东西都与你无关

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


但是正如Mirthel的回答所指出的,您正在使用的安装程序环境已经提供了一种通知其他程序环境已更改的方法,因此您应该使用它,而不是尝试手动执行。

我不认为有任何理由不推荐使用
SendMessageTimeOut
。你确定吗?“无效的API定义,使用其他重载”,使用其他重载。效果很好!这是一个RTFM的案例,如果我见过的话!谢谢