| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1542 人关注过本帖, 1 人收藏
标题:这样防止已经运行的程序再次运行?
只看楼主 加入收藏
ptyy803
Rank: 2
来 自:上海
等 级:论坛游民
威 望:2
帖 子:193
专家分:64
注 册:2009-6-11
收藏
得分:0 
对八楼的看法:程序正常运行是最基本的,如不能正常退出则就不能让用户使用,我说的是非程序技术原因,而是人为造成的,如:死机、其他运行软件造成的死机现象,还有停电、或主机放的位置很可能造成脚碰到了主机的开关和复位开关,这也是经常发生的事,如按你的做法,就得系统管理员去到数据表中修改,既然想到了就得考虑的全面点,尽量减少要程序员去修改的数据表的问题,这才是合格全面的程序员。不好意思,互相学习,取长补短。
2011-07-09 16:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我不知道你要管理員去改數據庫是什麽意思。程序用低級文件處理任何文件你不會嗎?數據庫文件頭部有空白區域你不知道嗎?在空白區域寫信息,數據庫自己是用不到的,不會影響數據庫打開,也不會改變數據庫中的數據,這些東西你都不知道?把數據庫文件頭部砍掉一截,必須用你自己的程序打開,這種做法你試過沒有?

授人以渔,不授人以鱼。
2011-07-09 16:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
這種情況,分別對應三種狀態:全新、啓動使用中、非正常退出過。用二進制的兩位就可以表示,00、01、10,程序啓動時檢查這個標誌,即知當前狀態。在任何一個dbf文件中,從頭開始往下數第13個字節,有16字節的空白區,是數據庫沒用的,在這個位置拿一個字節的兩位寫信息,也從這裏讀。在這樣的區域,寫什麽東西都不會影響數據庫的打開和處理,這種地方多的是,關鍵是人家不知道你在哪個位置寫東西、意味著什麽就行了。早時,在BMP文件暗藏病毒代碼,也是這樣做。

如果你不敢直接在數據庫中寫數據,就自己寫一個1Byte的文件唄,找好藏身之處就行了,設置爲隱藏的也可以,方法多得很。如果是以前,我直接在硬盤的空白區寫。

[ 本帖最后由 TonyDeng 于 2011-7-9 17:26 编辑 ]

授人以渔,不授人以鱼。
2011-07-09 17:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
說句不好聽的,你重要的工作程序在經常遇到停電、掉電、死機的環境中運行,很自豪嗎?服務器都告誡人們不要在上面運行太多無關的程序,關掉不需要的服務,幹嘛用的?哦,你寫個程序,它在運行,另一方面在看影碟、聊QQ、打遊戲,造成系統死機,卻說這很正常?

我又想請教一下:你程序中打開了數據庫,正在寫數據的瞬間掉電了,要不要請管理員修復數據庫?你如何保證這一點的,就能保證非正常退出時那種情況!

[ 本帖最后由 TonyDeng 于 2011-7-9 17:59 编辑 ]

授人以渔,不授人以鱼。
2011-07-09 17:34
ptyy803
Rank: 2
来 自:上海
等 级:论坛游民
威 望:2
帖 子:193
专家分:64
注 册:2009-6-11
收藏
得分:0 
还正不知上面这位朋友你编写过多少大型数据库软件,咳,无语。。。。。。。
2011-07-09 21:54
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
个人认为通过设置标志来判断程序是否重复运行有一定的局限性,采用4楼的方法应该会更合理些。
如果是单机版程序,也可以利用数据库无法重复打开的特性,在主程序打开数据库(或独占打开某个表文件)之前用on error语句进行判断,如打开时出错,则提示用户检查程序是否重复运行,或者是文件出错。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2011-07-13 17:23
ptyy803
Rank: 2
来 自:上海
等 级:论坛游民
威 望:2
帖 子:193
专家分:64
注 册:2009-6-11
收藏
得分:0 
回复16楼:按照4楼的代码运行过的,但还是出错,请指教。
2011-07-15 20:34
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
非常抱歉,我还没有考虑过在程序中加入防止重复运行的功能。原来曾经在网上看到过通过检测WINDOWS窗口标题的方式来防止重复运行,但我没有测试过。下面的这个链接也许对你有用:
http://www.

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2011-07-15 22:06
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
http://www.
上面的链接也可以参考,具体内容粘贴如下:
在主程序加上

DECLARE integer FindWindow in win32api string cClass,String cCaption
cCaption="你的主程序界面Caption值"
IF FindWindow(0,cCaption)#0
_SCREEN.caption=cCaption
=messagebox("本程序已经运行,请查看任务栏!",64,"信息提示")
RETURN .F.
ENDIF

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2011-07-15 22:09
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
支持 4楼 19 楼的见解。
2011-07-16 00:08
快速回复:这样防止已经运行的程序再次运行?
数据加载中...
 
   



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

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