新手提问在线等待(100分)

  • 主题发起人 主题发起人 lcl001
  • 开始时间 开始时间
L

lcl001

Unregistered / Unconfirmed
GUEST, unregistred user!
我做的程序 ,可以在一台机器多次重复启动,我如何用程序查出这个执行程序<br>现在有几个正在运行。能否控制它的同时运行次数,比如说在同一台机器,我只想<br>最多让它同时运行五个。请指教谢谢
 
当你做好程序后,可以计算程序的MD5或crc32码,因为这是唯一的,然后你可以枚举当前已运行进程取得进程的程序MD5或crc32码,与你的程序MD5或crc32码对比,相同认为已经运行了。至于控制运行多少,你可以在程序开始创建时判断。
 
用全局原子就OK。<br>参考下面的这段话:<br>我们也可以利用向系统添加全局原子的方法,来防止多个程序实例的运行。全局原子由Windows 系统负责维持,它能保证其中的每个原子都是唯一的,管理其引用计数,并且当该全局原子的引用计数为0时,从内存中清除。我们用GlobalAddAtom 函数向全局原子添加一个255个字节以内的字符串,用GlobalFindAtom来检查是否已经存在该全局原子,最后在程序结束时用GlobalDeleteAtom函数删除添加的全局原子。示例如下: <br><br>Uses Windows <br>const iAtom=‘SingleApp’; <br>begin <br> &nbsp;if GlobalFindAtom(iAtom)=0 then <br> &nbsp;begin <br> &nbsp; &nbsp;GlobalAddAtom(iAtom); <br> &nbsp; &nbsp;Application.Initialize; <br> &nbsp; &nbsp;Application.CreateForm(TForm1,Form1); <br> &nbsp; &nbsp;Application.Run; <br> &nbsp; &nbsp;GlobalDeleteAtom(GlobalFindAtom(iAtom)); <br> &nbsp;end else <br> &nbsp; &nbsp;MessageBox(0,'已有一个实例运行!','',mb_OK); <br>end;<br><br>利用全局原子的引用计数规则,我们还可以判断当前共运行了该程序的多少个实例: <br><br>var i:Integer; <br>begin <br> &nbsp;I:=0; <br> &nbsp;while GlobalFindAtom(iAtom)&lt;&gt;0 do <br> &nbsp;begin <br> &nbsp; &nbsp;GlobalDeleteAtom(GlobalFindAtom(iAtom)); <br> &nbsp; &nbsp;i:=i+1; <br> &nbsp;end; <br> &nbsp;ShowMessage(IntToStr(I)); <br>end;
 
是这样的我们公司做的通用软件,通过加密狗每个软件一个<br>有个客户单位用的无盘工作站,在服务器上安装软件之后,在<br>所有客户端都能用这个软件,我的目的是想控制它的数量。比如说<br>只能有五台机器同时用这个软件,无盘工作站的原理我不太知道,<br>不知道用楼上这个方法能否实现?
 
多人接受答案了。
 
后退
顶部