C/S结构的程序如何让客户端自动更新可执行文件?

crecrecre 2009-07-04 08:48:08
加精
C/S结构的程序如何让客户端自动更新可执行文件?
最好简单一些的程序。
...全文
1077 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
十豆三 2009-07-08
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 crecrecre 的回复:]
再问一个 do form waitform.scx 后面不能跟 nowait
怎样解决这个问题,就是执行 do form 后,继续执行后面的代码?
[/Quote]

将表单 waitform 设为非模式( WindowType=0 )即可
crecrecre 2009-07-08
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 crecrecre 的回复:]
再问一个 do form waitform.scx 后面不能跟 nowait
怎样解决这个问题,就是执行 do form 后,继续执行后面的代码?
[/Quote]


这个问题如何处理?
小人物2014 2009-07-07
  • 打赏
  • 举报
回复
其实很简单 杜思波告诉你,用程序开一个定时器,然后配置一个配置文件记录软件的最近版本,然后定期向服务器发验证包,如果发现新的就下载升级。
feiren_1012 2009-07-06
  • 打赏
  • 举报
回复
学习
crecrecre 2009-07-06
  • 打赏
  • 举报
回复
找到原因了,
是因为在 joindatabase() 这个自定义的函数里有 wait "......" window nowait
因为局域网络的质量不是很好,在程序里有很多地方用到了 wait ,发现使用它之后,在表单处理上
龙其是在激活的问题上,它好像有些问题。
现在只能建一个 WaitForm.scx 来处理等待的问题了。
watercity0 2009-07-06
  • 打赏
  • 举报
回复
看了
lucky313 2009-07-06
  • 打赏
  • 举报
回复
mark
crecrecre 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 Tomzzu 的回复:]
用升级程序来引导
快捷键连接到升级程序上, 每次启动其实是启动升级程序, 升级程序判断有没有要升级的, 没有就直接启动可执行文件
有就先升级覆盖可执行文件, 再启动它
[/Quote]

怎么写?
十豆三 2009-07-06
  • 打赏
  • 举报
回复
新建一个文件"config.fpw",里面只写上“screen=off”(双引号内)
然后把此文件添加到你 A.EXE 和 B.exe 工程中的other中other files中,然后重新编译。或把此文件放到程序所在目录下也可。

新建“config.fpw”的方法:先建一个文本文件,然后再把扩展名改为fpw.

然后再试试焦点问题
十豆三 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 crecrecre 的回复:]
可以

单独运行它,是激活的,并显示在最前面。
[/Quote]

我测试却是正常的
crecrecre 2009-07-06
  • 打赏
  • 举报
回复
可以

单独运行它,是激活的,并显示在最前面。
Tomzzu 2009-07-06
  • 打赏
  • 举报
回复
用升级程序来引导
快捷键连接到升级程序上, 每次启动其实是启动升级程序, 升级程序判断有没有要升级的, 没有就直接启动可执行文件
有就先升级覆盖可执行文件, 再启动它
十豆三 2009-07-06
  • 打赏
  • 举报
回复
你手动运行你的 B.EXE 能不能获得焦点。
crecrecre 2009-07-06
  • 打赏
  • 举报
回复
config.fpw
screen = off

B.exe 的 LoginForm.scx 表单的 ShowWindow = 2

crecrecre 2009-07-06
  • 打赏
  • 举报
回复
getnewfile.prg

SET TALK OFF
SET SAFETY OFF
SET SYSMENU OFF
SET DATE TO YMD
SET MARK TO "-"
SET HOURS TO 24
SET CENTURY ON
SET DELETED ON
SET NULLDISPLAY TO ""
SET NOTIFY OFF
SET NOTIFY CURSOR OFF
SET CONFIRM ON


joindatabase() && 连接数据库

Declare Long WinExec In kernel32 String,Long

IF connectstr > 0
cFind = "select filedate from newfile"
nFind = SQLEXEC(connectstr, cFind, "filetable")
IF RECCOUNT() > 0
cName = "stumanage.exe"
IF FILE(cName)
ADIR(fileinfo, cName)
cDate = DTOS(fileinfo(1,3))+STRTRAN(fileinfo(1,4),':','')
IF TRIM(filedate) > cDate
=SQLEXEC(connectstr, "select filename from newfile", "filetable")
STRTOFILE(filename, "stumanagement.exe")
CLOSE ALL
RUN /N1 stumanagement.exe
* =WinExec("stumanagement.exe",1)
QUIT
ENDIF
ELSE
=SQLEXEC(connectstr, "select filename from newfile", "filetable")
STRTOFILE(filename, "stumanagement.exe")
CLOSE ALL
RUN /N1 stumanagement.exe
* =WinExec("stumanagement.exe",1)
QUIT
ENDIF
ELSE
=MESSAGEBOX("服务器上没有要下载的文件!"+CHR(13)+CHR(13)+"请通知系统管理员")
ENDIF
ELSE
=MESSAGEBOX("没有与数据库连接上!")
QUIT
ENDIF


A.exe 没有表单
十豆三 2009-07-06
  • 打赏
  • 举报
回复
帖全你的代码,并说明你的 A.EXE 表单相关属性
crecrecre 2009-07-06
  • 打赏
  • 举报
回复
run /N1 B.exe

=WinExec("B.exe",1)

还是没有显示在最前面?

把 LoginForm.scx 表单的 AlwaysOnTop = .T. 是显示在最前面了,可没有被激活。
十豆三 2009-07-06
  • 打赏
  • 举报
回复
API方式

run /n B.exe

改为

Declare Long WinExec In kernel32 String,Long
=WinExec("B.exe",1)
十豆三 2009-07-06
  • 打赏
  • 举报
回复
run /n B.exe

改为

run /n1 B.exe


crecrecre 2009-07-06
  • 打赏
  • 举报
回复
close all
run /n B.exe
quit

B.exe 没有显示在最前面,如何解决?
在开始菜单栏有,就是需要再点击一下,才显示在其它窗口的前面。
加载更多回复(22)

2,727

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧