开启辅助访问

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

程序更新自身失败

查看数: 344 | 评论数: 7 | 收藏 3
关灯 | 提示:支持键盘翻页 & lt;-左 右 ->
    组图打开中,请稍候......
发布时间: 2025-2-13 11:36

正文摘要:

请问大佬们,程序检测更新自身,我这样写 我自己电脑win10系统  可以正常更新替换自身, 别的系统不行 ,比如win7系统 更新下载替换自身就失败 有什么办法可以解决? ...

回复

兰色的夜晚   河北省沧州市 发表于 2025-2-13 17:43:38

On Error Resume Next
WScript.sleep 800
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.deleteFile "老文件路径"
fso.CopyFile "update临时文件","新文件路径",True
Dim oShell
Set oShell = WScript.CreateObject ("WSCript.shell")
oShell.run """新文件路径"""
fso.deleteFile "VBS路径"
fso.deleteFile "update临时文件"



上面就是完整的  bat 文件   你可以保存到常量   子文本替换()    需要的完整路径
#更新VBS内容 -----------------------------------------------

.版本 2

    ' //////////////////////////获取文件信息////////////////////////////////////////////////////////////////////////
    局部_临时文件vbs = 取运行目录 () + “\” + “update_” + 到文本 (新系统_取启动时间2 ()) + “.vbs”

    VBS = #更新VBS内容
    .如果真 (全局_文件更新完是否执行 = 假)  ' 是否 执行新文件
        VBS = 子文本替换 (VBS, #文件更新完是否执行_行, “”, , , 假)
    .如果真结束
    .如果真 (全局_下载更新删除旧文件 = 假)  ' 是否 删除旧文件
        VBS = 子文本替换 (VBS, #下载更新删除旧文件_行, “”, , , 假)
    .如果真结束
    VBS = 子文本替换 (VBS, “老文件路径”, 取运行目录 () + “\” + 取执行文件名 (), , , 假)
    VBS = 子文本替换 (VBS, “新文件路径”, 取运行目录 () + “\” + 局部_文件.文件名, , , 假)
    VBS = 子文本替换 (VBS, “update临时文件”, 局部_临时文件tmp, , , 假)
    VBS = 子文本替换 (VBS, “VBS路径”, 局部_临时文件vbs, , , 假)

    处理事件 ()
    写到文件 (局部_临时文件vbs, 到字节集 (VBS))
    处理事件 ()

    .如果真 (全局_是否结束主窗口 = 假)  ' 是否 结束当前进程!
        处理事件 ()
        运行 (“wscript.exe ” + #引号 + 局部_临时文件vbs + #引号, 假, )
        处理事件 ()
        销毁 ()
        返回 ()
    .如果真结束


算法艺术家   辽宁省丹东市 发表于 2025-2-13 14:07:46
这个也可以删除自己
  
子程序名返回值类型公开备 注
文件延迟删除逻辑型 如果文件不存在返回假
参数名类 型参考可空数组备 注
文件路径文本型完整路径
时间整数型单位:秒
变量名类 型静态数组备 注
命令文本型 
如果真 (文件是否存在 (文件路径))
命令 = “cmd /c ping 127.0.0.1 -n ”到文本 (时间)“ >nul & del ”#引号 + 文件路径 + #引号
运行 (命令, 假, 1)
返回 ()
返回 ()

linqing4   江苏省苏州市 发表于 2025-2-13 14:01:14
if not "%1"=="wkdxz" mshta vbscript:createobject("wscript.shell").run("""%~f0"" wkdxz",vbhide)(window.close)&&exit
ping 127.0.0.1 -n 5 >nul
taskkill /f /t /im 程序名称.exe
ping 127.0.0.1 -n 2 >nul
ren D:\桌面\新建文件夹\程序名称.exe 程序名称_old.exe
ren D:\桌面\新建文件夹\程序名称_new.exe 程序名称.exe
D:\桌面\新建文件夹\程序名称.exe
attrib -h -s -r -a %0
del %0

补充内容 (2025-2-13 14:02):
CMD批处理运行即可,替换路径和程序名称.exe

补充内容 (2025-2-13 14:03):
自动将旧的程序重命名为程序名称_old.exe
算法艺术家   辽宁省丹东市 发表于 2025-2-13 13:57:43
可以用这个代码
  
子程序名返回值类型公开备 注
程序热更新逻辑型 需提前把更新文件写到 取运行目录 () + “\更新.exe” 可在写入新文件后运行或程序每次启动时运行   
变量名类 型静态数组备 注
自己名文本型 
更新名文本型 
临时名文本型 
目录名文本型 
目录名 = 取运行目录 ()“\”
临时名 = 目录名 + “tmp”
如果真 (文件是否存在 (临时名))  ' 擦屁股
删除文件 (临时名)
自己名 = 目录名 + 取执行文件名 ()
更新名 = 目录名 + “更新.exe”
如果真 (文件是否存在 (更新名))
置文件属性 (自己名, 0)
文件更名 (自己名, 临时名)
延时 (5)
处理事件 ()
文件更名 (更新名, 自己名)
程序_重启 ()
返回 ()
返回 ()

鹏书   海南省海口市 发表于 2025-2-13 12:22:08
你直接在好之后直接运他 然后用 程序_删除自身 () 这个方法把自己给删了就好了 就是新下载得后面带一个版本号让名字不一样就好了
真人秀,代开Q钻   四川省成都市 发表于 2025-2-13 12:01:08
兰色的夜晚 发表于 2025-2-13 11:51
更新自身的话   用CMD 做一下延时中转   下载到临时目录    然后执行CMD  延时1秒   立即结束自身    通过C ...

怎么写代码
兰色的夜晚   河北省沧州市 发表于 2025-2-13 11:51:03
更新自身的话   用CMD 做一下延时中转   下载到临时目录    然后执行CMD  延时1秒   立即结束自身    通过CMD    将临时文件  移过来覆盖自身.

点评

例如写一个.bat运行   河北省沧州市  发表于 2025-2-13 11:51
发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表