[已解决]如何在不中断程序运行的情况下实现程序的更新
本帖最后由 xyold1 于 2012-4-29 17:08 编辑手动的办法是先将程序重命名,再复制更新的文件
现在想做一个脚本更新,无奈不知如何重命名,或者有没有更好的办法呢
下面找到的_FileRename试了下也不能重命名正在使用的文件,强制删除也不行
Func _FileRename($fr_FullPath, $fr_Rename)
If $fr_Fullpath = "" Then
Return -1
ElseIf $fr_Rename = "" Then
Return -1
ElseIf Not FileExists($fr_Fullpath) Then
Return -1
Else
;返回所执行命令的退出代码
Return _RunDOS("ren """& $fr_FullPath &""" """& $fr_Rename &"""")
EndIf
Endfunc 回复 1# xyold1
楼主有点异想天开了吧?
Windows下面, 正在运行的程序怎么能够改名? 回复 2# user3000
我无知了?{:face (207):} 回复 3# xyold1
你应该有玩过游戏吧?
一个游戏其实有很多EXE, 有专门用来更新工作的EXE, 有的还分登录用的EXE; 每个游戏都有个主程序.
大多数游戏进行更新时是不能玩的, 正是这个道理. 现在有些游戏开发了一边玩一边下载更新内容的功能,
但也仅仅是下载, 为将来的更新作准备而已. 回复 4# user3000
亲,比方不是这么打的,游戏更新的时候 不能玩,那可能是因为服务器也要做想应的更新,不等于玩的时候不能更游戏 唉,上面的函数可以,原来第二个参数只传文件名就行了... 回复 5# xyold1
好吧, 最后再多说两句.
我在网吧工作, 自然少不了做更新游戏的事情.
有时打开某个游戏后会看到这样的提示: 游戏登录器需要重启以便进行更新!
我确定此信息后, 它会关闭, 然后有新信息提示正在安装, 完了, 又重新打开该新登录器!
我自问没有足够的理论跟你讨论这问题, 但看了你5楼的回复, 我心底却真是认为你是无知的了. 那应该更新的是游戏的一些资源文件吧 并非主程序 比如这个 test.txt你可以随时更新 但正在运行的主程序是无法直接更新的
While 1
ConsoleWrite(FileRead("Test.txt")&@CRLF)
Sleep(5000)
WEnd
最后再说一句,正在运行的主程序是可以更新的,方法是将其重命名,再复制要更新的文件,重命名函数就是上面的函数over over
大家别再说不能更新什么的了
{:face (288):} 本帖最后由 user3000 于 2012-4-29 17:53 编辑
回复 9# xyold1
楼主, 请发下简洁代码上来, 给个学习机会?
或者, 让我见证你的程序(已编译成EXE!!!)不是在退出运行的情况下实现改名的?
因为, WINDOWS向来是禁止给正在运行的程序重命名的. 回复 10# user3000
一会发源码 回复 10# user3000
http://www.autoitx.com/forum.php?mod=viewthread&tid=31901&page=1&extra=#pid429517 回复 12# xyold1
经过测试, 在程序一直运行时,的确可以修改程序自身的命名!
简直是创建伪进程的一大利器!从进程里看到了还是原名字, 但实质上该进程的文件已经被改名! 原进程EXE已被重命名!
感谢楼主, 又学习了新知识! 楼主真是高人啊! 楼主真是高人啊!
页:
[1]
2