微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何确保仅运行我的应用程序的一个实例?

如何解决如何确保仅运行我的应用程序的一个实例?

| Delphi XE VCL是否支持确保仅运行一个应用程序实例? 过去,我使用库代码来控制Mutex,它看起来总是很复杂。当我在Delphi XE中启动一个新项目时,我想知道是否需要挖掘旧代码,或者XE已经内置了支持?还是有另一个易于应用的美观又现代的代码

解决方法

我使用JCL来做到这一点:
program MyProgram;

uses
  JclAppInst;

begin
  JclAppInstances.CheckSingleInstance; // Added instance checking
  Application.Initialize;
  Application.CreateForm(TMainForm,MainForm);
  Application.Run;
end.
有关此文档和通知方案的文档,请参见JCL Wiki。,启动应用程序时,您将创建一个名为Mutex的文件。检查“ 1”以查看其他实例是否已在运行。 将此代码放在DPR文件中\“开始\”之后。用自己的一个替换GUID。当我需要一个不可能用于其他任何目的的文本常量时,通常只需按Ctrl + G即可获得GUID!
if CreateMutex(nil,True,\'6EACD0BF-F3E0-44D9-91E7-47467B5A2B6A\') = 0 then
  RaiseLastOSError;

if GetLastError = ERROR_ALREADY_EXISTS then
  Exit;
似乎代码泄漏了句柄,因为它没有保存
CreateMutex
的返回值。不是。当我们的应用程序终止时,Windows会自动释放该句柄,这对我们来说绝对可以。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。