如果你认为你是“高手”,你是“老师”级的,就请进来看看!!!!

刘物峰 2006-11-28 09:50:26
我现在有一个在线升级程序和一个主程序,在主程序中用:

PathString := ExtractFilePath(Application.ExeName)+'AutoUpdate.exe' ;
shellexecute(handle,'open',pchar( PathString ),nil,nil,sw_shownormal);

WinExec ( pchar(PathString), SW_SHOW );

shellexecute(handle,nil,XXX.exe,nil,pchar(PathString),sw_shownormal);
都可以调出在线升级程序,

但是,执行中也可以下载程序,也可以关闭主程序,就是不能替换主程序。
我要是“单独”去运行在线升级程序就可以升级成功!!

请问这是为什么??能不能给出修改方案??或举例说明? 
先谢谢各位“老师”和“高手”!
...全文
400 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuxuguahuai 2006-11-30
  • 打赏
  • 举报
回复
不是高手和老师 可以看看您的帖子么?
zjh527 2006-11-30
  • 打赏
  • 举报
回复
楼上的方法可以,我的升级程序就是这么做的。


47522341 2006-11-30
  • 打赏
  • 举报
回复
调出升级程序后将主程序关闭并删除;
然后再下载新版主程序并调用主程序;
关闭升级程序。
Darc 2006-11-30
  • 打赏
  • 举报
回复
回楼上,不可以:)
happyhong 2006-11-29
  • 打赏
  • 举报
回复
又打少了一个双引号,晕
"c:\update.exe" "xxx.exe"
happyhong 2006-11-29
  • 打赏
  • 举报
回复
第2点错了,应该是快捷方式是"c:\update.exe "xxx.exe"
happyhong 2006-11-29
  • 打赏
  • 举报
回复
基本同意GavinLv(Gavin.Lv.)
我们公司的升级也是这样的,
1.单独做个UPDATE.EXE;
2.桌面的快捷是这样的: "c:\update.exe xxx.exe" 通用更新程序调用参数去指定的最新地址找要更新的程序
3.发现就先复制,完成后自动启动xxx.exe
4.如果目标地址的程序不是最新则不更新.

基本思路是这样
nippycn 2006-11-29
  • 打赏
  • 举报
回复
走过,路过,千万不要错过....
hydonlee 2006-11-29
  • 打赏
  • 举报
回复
同意楼上, 现在的游戏基本上都是这么做的.
spcc520 2006-11-28
  • 打赏
  • 举报
回复
關注中
flyinggoal 2006-11-28
  • 打赏
  • 举报
回复
关注中
刘物峰 2006-11-28
  • 打赏
  • 举报
回复
各位朋友,我的主程序是关闭了的,在进程中是找不到的,
在公司测试时没有什么问题,在客房那测试就有问题!!!!!
XP,2000下都测试过了!!!!

有些机子就不行,有些机子又没有问题!!!
StarRains 2006-11-28
  • 打赏
  • 举报
回复
同意一楼的解决方法,不能替换主程序,原因就是主程序并没有被完全关闭,是因为shellexecute里引用了主程序的handle;

更同意一楼的‘以这样的方式发帖是不是有些不妥’
zuoansuifeng 2006-11-28
  • 打赏
  • 举报
回复
老师高手不敢当 在线升级的时候你把升级的程序写到线程里面去 这样试试看可以替换不
hongqi162 2006-11-28
  • 打赏
  • 举报
回复
PathString := ExtractFilePath(Application.ExeName)+'AutoUpdate.exe' ;
shellexecute(GetDesktopWindow,'open',pchar( PathString ),nil,nil,SW_SHOW);
close;//关闭主程序


升级完毕后再按照上边的方法关闭update启动你的主程序 这样如何???



以这样的方式发帖是不是有些不妥。。。。
GavinLv 2006-11-28
  • 打赏
  • 举报
回复
我做过的升级程序跟你的逻辑有点区别。
我们是将升级程序本身作为程序入口点的,也就是说在桌面以及开始菜单的快捷方式都是指向AutoUpdate.exe的,甚至其他的所有需要启动程序的地方都是调用AutoUpdate.exe的。

AutoUpdate.exe的工作流程如下:
1.检查UpdateServer上有没有可用更新(有->2;没有->7)
2.备份当前的程序文件(根据需要这部分逻辑可以复杂些)
3.更新程序
4.检验更新结果(更新成功->6;更新失败->5)
5.还原备份的文件(->7)
6.删除第2步备份的程序文件
7.启动主程序

这样就不会引起自己更新自己这类的麻烦的逻辑问题了。

希望能对你有帮助:)
pressman 2006-11-28
  • 打赏
  • 举报
回复
路过
  • 打赏
  • 举报
回复
升级完毕后,强行结束前一个程序进程,看行么?
结束后再备份原来的,拷贝新的替换名称,再运行.
belsai 2006-11-28
  • 打赏
  • 举报
回复
你的方式是通过主程序去调用升级程序,可不可以换种方式,先打开升级程序对主程序进行更新,再运行主程序最后退出升级程序.这样就不会出现你所说的问题了.

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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