| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1092 人关注过本帖, 2 人收藏
标题:关于避免EXE重复运行的问题
只看楼主 加入收藏
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:343
专家分:500
注 册:2013-5-14
收藏
得分:0 
互斥 应该是最标准。。。。加锁也行。。。。
2023-10-10 13:38
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1069
专家分:2613
注 册:2015-12-30
收藏
得分:0 
回复 8楼 kangss
方法可行,多谢多谢
2023-10-10 15:22
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1069
专家分:2613
注 册:2015-12-30
收藏
得分:0 
以下是引用kangss在2023-10-10 11:04:06的发言:

禁止程序重复运行的又一方法
DECLARE integer CreateEventA IN WIN32API integer,long,long,string
DECLARE integer OpenEventA IN WIN32API integer,long,string
IF OpenEventA(2031619, .F.,myappname)0 &&myappname可以是任意文本,最好要长一点。
    =MESSAGEBOX("程序已经在运行,不要浪费资源呵!", 48, "信息提示")
    RETURN .F.
ELSE
    CreateEventA(0, .F., .F.,myappname)
ENDIF

测试未成功,代码中的myappname换成exe文件名(如:aaa.exe),同时两次运行同一exe,OpenEventA(2031619, .F.,myappname)的值均为0,不知我的操作是否正确
其中的2031619是固定值吧?

[此贴子已经被作者于2023-10-10 15:26编辑过]

2023-10-10 15:24
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1069
专家分:2613
注 册:2015-12-30
收藏
得分:0 
回复 10楼 csyx
方法可行,多谢多谢
2023-10-10 15:25
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:343
专家分:500
注 册:2013-5-14
收藏
得分:2 
互斥,它少了一步。。。
2023-10-10 17:57
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:651
专家分:2518
注 册:2018-3-13
收藏
得分:10 
以下是引用iswith在2023-10-10 17:57:33的发言:

互斥,它少了一步。。。

是的,QUIT 前应加一条 CloseHandle

这家伙很懒,啥也没留下
2023-10-10 21:06
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1069
专家分:2613
注 册:2015-12-30
收藏
得分:0 
以下是引用csyx在2023-10-10 21:06:28的发言:


是的,QUIT 前应加一条 CloseHandle

正确!!!
2023-10-11 08:35
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1069
专家分:2613
注 册:2015-12-30
收藏
得分:0 
以下是引用星光悠蓝在2023-10-10 10:16:07的发言:

用两个值来记录,一个记录是否运行,另一个记录是否正常退出,下次如果检测为非正常退出,则可正常运行。

我脑子都转筋了还是没想明白
程序执行起来,是否运行=是,正常退出=否,这时断电了,那么再执行程序时看这两个变量的话,还是运行且未退出状态,仍然没法判断是否重复了
2023-10-11 08:41
yiyanxiyin
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:176
专家分:1253
注 册:2023-6-29
收藏
得分:0 
以下是引用laowan001在2023-10-11 08:41:46的发言:


我脑子都转筋了还是没想明白
程序执行起来,是否运行=是,正常退出=否,这时断电了,那么再执行程序时看这两个变量的话,还是运行且未退出状态,仍然没法判断是否重复了



这种方法是不行的, 因为非正常退出你没法记录状态, 和正在运行没法区别, 你可以搞个心跳, 比如每一秒记录一下当前时间(心跳时间), 表示它没死,  程序启动时检查心跳时间, 如果和现在的时间间隔超过2秒就允许启动,否则就不让启动


当然, 微软有标准api来判断, 产品里面还是使用标准的来吧, 自己琢磨搞着玩可以试试自己的方法

[此贴子已经被作者于2023-10-11 09:52编辑过]

2023-10-11 09:42
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1069
专家分:2613
注 册:2015-12-30
收藏
得分:0 
以下是引用yiyanxiyin在2023-10-11 09:42:38的发言:




这种方法是不行的, 因为非正常退出你没法记录状态, 和正在运行没法区别, 你可以搞个心跳, 比如每一秒记录一下当前时间(心跳时间), 表示它没死,  程序启动时检查心跳时间, 如果和现在的时间间隔超过2秒就允许启动,否则就不让启动


当然, 微软有标准api来判断, 产品里面还是使用标准的来吧, 自己琢磨搞着玩可以试试自己的方法

这个方法可行,就是有点麻烦,感谢回复

[此贴子已经被作者于2023-10-11 15:11编辑过]

2023-10-11 09:59
快速回复:关于避免EXE重复运行的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012279 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved