关于防止程序多重运行的问题
吴宏伟 2008-11-15 10:45:16 在写程序时有一个问题解决不了,特来求教高手指点。
此程序需要在后台做一些操作,并且程序中窗体的Visible和ShowInTaskbar属性都已经设为False,程序将来运行时,可以放到任何一个目录中。
我现在想做到,此程序的一个实例启动后(任意目录中的),先判断是否有其它的实例正在运行,如果有就循环等待其它程序实例结束后再继续执行。
程序的其它功能能已经做好了,现在就在这一个功能上卡壳了。
试过几个方法都不太理想:
1、用CreateFile 带FILE_FLAG_DELETE_ON_CLOSE创建临时文件。
2、用CreateMutex创建约定名称的互斥体。
3、用BroadcastSystemMessage或PostMessage传递自定义消息。
这几种方法都试了一下,好像都存在先前实例非正常结束,没有正确关闭某句柄,导致后面运行的实例不能正常判断先前的程序已经结束。
也许是我对这几个函数的用法不太了解,希望高手给个解决方案。不甚感谢!
App.PrevInstance 属性只能判断同一位置的实例。如果两个程序在不同的文件夹就不行了。