标题:如何解决连编后 EXE 文件重复运行出现“文件不能存取”错误?
只看楼主
pzyun1985
Rank: 2
等 级:论坛游民
帖 子:106
专家分:18
注 册:2013-4-13
结帖率:84.21%
已结贴  问题点数:20 回复次数:12 
如何解决连编后 EXE 文件重复运行出现“文件不能存取”错误?
我的EXE文件是单机查询使用(本地DBF表数据),有些用户电脑配置低,运行后不能立即弹出窗口,又立即运行第二次,就出现“不能存取表文件”错误对话框,能不能运行EXE就判断是否已运行,如果正在运行就不再运行,如果用户运行正常,把窗口最小化,用户再次运行则自动把窗口最大化(就像KUGOO音乐软件一样)。怎么写代码?

[ 本帖最后由 pzyun1985 于 2014-4-30 13:38 编辑 ]
搜索更多相关主题的帖子: 单机 如何 音乐 对话框 电脑配置 
2014-04-30 13:36
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:5 
liuxingang28帖中有解决类似问题的方法,自己找下
网上也有解决该问题的方法

坚守VFP最后的阵地
2014-04-30 13:51
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
遇到问题了,才想到如何解决问题的方法
说明楼主很少到论坛来

坚守VFP最后的阵地
2014-04-30 13:55
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:649
专家分:2156
注 册:2014-2-7
得分:5 
VFP 学习、开发漫谈 (18)
https://bbs.bccn.net/thread-430164-1-1.html

泉城飞狐
2014-04-30 13:57
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
得分:5 
4楼的开发漫谈(18),方法1,是一种可参考的方法,但是过于简单。因为只说明了:当一个窗口正在运行的时候
,再重复打开同一个窗口时,程序会退出。因此,没有再说明:当窗口已经最小了的时候,再重复打开同一个窗口时,
让最小化的窗口,重新以原状显示出来。如果程序中有 n 个最小化了的窗口,怎样能做到:任意重复打开其中一个窗口时,
对应的最小化窗口即可相应,以原来的大小重新显示。
 
2014-05-01 21:22
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:5 
要不让程序重复运行,就需要在程序启动时对窗口进行判断,也可以设置一个标志来判断。
想让程序可以重复运行,就不能重复打开相同的数据库或表文件。

活到老,学到老! http://www. E-mail:hu-jj@
2014-05-01 22:11
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:649
专家分:2156
注 册:2014-2-7
得分:0 
以下是引用qingfameng在2014-5-1 21:22:13的发言:

4楼的开发漫谈(18),方法1,是一种可参考的方法,但是过于简单。因为只说明了:当一个窗口正在运行的时候
,再重复打开同一个窗口时,程序会退出。因此,没有再说明:当窗口已经最小了的时候,再重复打开同一个窗口时,
让最小化的窗口,重新以原状显示出来。如果程序中有 n 个最小化了的窗口,怎样能做到:任意重复打开其中一个窗口时,
对应的最小化窗口即可相应,以原来的大小重新显示。
 

应用程序窗口和表单窗口是两个概念。对于应用程序窗口来说,若想在重复运行时不退出,而是激活并恢复原窗口,可以使用 ShowWindow 等相关API函数实现。对于程序中的表单窗口,若要防止重复运行,请参考我的“VFP学习、漫谈(八)”中的 DOFORM()函数,在“VFP学习、漫谈(18)”中也有提及。

泉城飞狐
2014-05-02 09:23
pzyun1985
Rank: 2
等 级:论坛游民
帖 子:106
专家分:18
注 册:2013-4-13
得分:0 
虽然不成功,但还是谢谢各位了,单机数据版才出现这个问题,网络SQL共享就没问题,只有提醒用户打开的时候出现错误点“取消”键吧
2014-05-02 13:54
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
得分:0 
泉城飞虎的若干漫谈,确实让人学到了不少的东西。此种奉献精神也很值得学习。如果能将楼主说的问题的后半部分,用 API 语句解决一下,那是很好的。
2014-05-02 23:35
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:649
专家分:2156
注 册:2014-2-7
得分:0 
以下是引用qingfameng在2014-5-2 23:35:00的发言:

泉城飞虎的若干漫谈,确实让人学到了不少的东西。此种奉献精神也很值得学习。如果能将楼主说的问题的后半部分,用 API 语句解决一下,那是很好的。

在“漫谈(18)”中,防止重复运行应用程序时,采取了直接退出应用程序的处理方法。若发现应用程序已经启动,在退出前能够激活原窗口,用户的体验可能更好一些。

解决方案如下:

程序代码:
# DEFINE SW_NORMAL 1    && 窗口状态:正常大小
# DEFINE SW_MAXIMIZE 3  && 窗口状态:最大化

DECLARE integer FindWindow IN WIN32API integer,string    && 获取应用程序窗口句柄
DECLARE integer ShowWindow IN WIN32API integer,integer   && 显示应用程序窗口
DECLARE integer IsZoomed IN WIN32API integer             && 判断窗口是否最大化

cTitle = '物料管理系统'                   && 应用程序标题
nHwnd = FindWindow(0,cTitle)              && 获取窗口句柄
IF nHwnd > 0                              && 应用程序已启动
    IF IsZoomed(nHwnd) = 1                && 原窗口的状态是最大化
        ShowWindow(nHwnd,SW_MAXIMIZE)     && 激活原窗口,并保持最大化
    ELSE
        ShowWindow(nHwnd,SW_NORMAL)       && 原窗口是隐藏或最小化状态,则激活原窗口,并保持正常大小
    ENDIF
    QUIT                                  && 退出本次应用程序
ENDIF



泉城飞狐
2014-05-04 10:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-430857-1-1.html




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

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