Delphi XE VCL是否支持确保只运行单个应用程序实例?
在过去,我使用库代码来控制一直看起来很复杂的Mutex.当我在Delphi XE中开始一个新项目时,我想知道是否需要挖掘旧代码,或者是否已经在XE中内置了支持?或者是否有另一个易于应用的代码,既漂亮又现代?
Cos*_*und 36
您在启动应用程序时创建一个命名的Mutex.检查GetLastError其他实例是否已在运行.
将此代码放在DPR文件中的"begin"之后.用您自己的GUID替换GUID.当我需要一个不太可能用于其他任何东西的文本常量时,我通常只需按Ctrl+ G即可获得GUID!
if CreateMutex(nil, True, '6EACD0BF-F3E0-44D9-91E7-47467B5A2B6A') = 0 then
RaiseLastOSError;
if GetLastError = ERROR_ALREADY_EXISTS then
Exit;
Run Code Online (Sandbox Code Playgroud)
它可能看起来像代码泄漏一个句柄,因为它没有保存返回CreateMutex.不是.当我们的应用程序终止时,Windows将自动释放句柄,这对我们来说绝对没问题.
Cló*_*ior 25
我使用JCL来做到这一点:
program MyProgram;
uses
JclAppInst;
begin
JclAppInstances.CheckSingleInstance; // Added instance checking
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)
有关此文档和通知方案的文档位于JCL Wiki.
| 归档时间: |
|
| 查看次数: |
13789 次 |
| 最近记录: |