首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么保证在任何情况下,程序只能执行一次

2013-09-06 
如何保证在任何情况下,程序只能执行一次?我原来一直用下面代码保证程序只执行一次,这在本机上执行时是有效

如何保证在任何情况下,程序只能执行一次?
我原来一直用下面代码保证程序只执行一次,这在本机上执行时是有效的。
但如果我用远程桌面连接客户机器,以administrator运行后,客户再在本地运行这个程序,就不能提示“程序已经运行!”了,这样,内存中就有了两个进程。

我如何保证无论什么情况下,都只能让程序运行一次呢?

---------------------------------------------------
附:我的工程文件代码:
var
  hMutex: THandle;     //uses windows
  Ret: Integer;
begin
   Application.Initialize;
   Application.Title := '我的短信服务程序';
   try
    hMutex := CreateMutex(nil, False, '我的短信服务程序');
    Ret := GetLastError;

    if Ret <> ERROR_ALREADY_EXISTS then
    begin
      Application.CreateForm(TFrmMain, FrmMain);
      Application.Run;
    end
    else
      Application.MessageBox('程序已经运行!', '提示!', MB_OK + MB_ICONWARNING);
   finally
      ReleaseMutex(hMutex);
end;


[解决办法]
也可以试试把
hMutex := CreateMutex(nil, False, '我的短信服务程序');
后面的名称改成
'Global\我的短信服务程序'
[解决办法]
楼上说的对了,因为不同用户运行在不同的Session中.
比如服务和普通应用程序.
Mutex的名字要加上Global命名空间,另外还要初始化第一个权限参数
[解决办法]
最简单的,独占模式打开一个文件。
[解决办法]
需求应该是:同一OS(包括多个会话)同一时间只能运行一个实例
的确应该靠文件或tcp端口的互斥性来保证了
[解决办法]
启动了,在本地写一个文件。
结束的时候,删掉改文件。
文件不好,就注册表。

[解决办法]
1在云端运行。
2在服务器上建立个运行表格。

热点排行