V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
ropon

go 编写更新程序改名自删疑问

  •  
  •   ropon ·
    ropon · May 11, 2020 · 3090 views
    This topic created in 2190 days ago, the information mentioned may be changed or developed.

    需求:

    • 根据操作系统检查更新
    • 更新后自动改名运行,原程序自删

    疑问:

    • Windows 平台 运行 demo.exe 检查更新下载最新版本保存 demo_1.1.exe ,如何自动改名 demo.exe 并自删原程序
    • Linux 平台 运行 demo 检查更新下载最新版本保存 demo_1.1_amd64,如何自动改名 demo 并自删原程序
    18 replies    2020-05-11 17:53:55 +08:00
    davidyanxw
        1
    davidyanxw  
       May 11, 2020
    你这是要写个病毒?
    neoblackcap
        2
    neoblackcap  
       May 11, 2020
    下载完了,校验然后就退出原来的程序,启动一个清理程序清理以及改名不就可以了?
    hwdef
        3
    hwdef  
       May 11, 2020
    启动第三个程序,
    a b c
    a 升级为 b
    a 退出 调用 c 删除 a
    ropon
        4
    ropon  
    OP
       May 11, 2020
    @hwdef 一个程序能实现吗
    hwdef
        5
    hwdef  
       May 11, 2020
    或者 a 就不做这些功能,,,,c 一直在监控,,更新删除都由 c 来做。
    hwdef
        6
    hwdef  
       May 11, 2020
    @ropon 一个程序应该不行吧,,,会占用着,,删不掉。。
    hwdef
        7
    hwdef  
       May 11, 2020
    估计要看看底层了。。。让程序运行在内存,,然后删掉自己,,否则会一直锁着吧,,,不懂。。。
    wafm
        8
    wafm  
       May 11, 2020
    我在写桌面程序的时候是做了一个中转应用执行脚本去操作的
    KotlinAmai
        9
    KotlinAmai  
       May 11, 2020   ❤️ 2
    a 更新,下载 a_update
    a 启动 a_update,传参,a 退出
    a_update 删除 a
    a_update 复制 a_update 到 a
    a_update 启动 a,传参,a_update 退出
    a 删除 a_update
    KotlinAmai
        10
    KotlinAmai  
       May 11, 2020
    DefoliationM
        11
    DefoliationM  
       May 11, 2020
    第一个程序检测到更新的时候,调用第二个程序(更新程序),结束第一个程序进程并进行更新,然后启动更新后的程序,最后结束更新程序。
    None123
        12
    None123  
       May 11, 2020
    写病毒还是外挂?
    DefoliationM
        13
    DefoliationM  
       May 11, 2020
    linux 下即使程序在运行也能删除运行文件,但是程序不会结束,会在目录下留下一个.开头的临时文件,所以在 linux 下可以直接替换,但是需要手动重启一下程序。windows 下就不清楚了。
    Vegetable
        14
    Vegetable  
       May 11, 2020
    linux 好像可以吧
    - 下载新的
    - 把自己删了
    - 把新的改名为自己的文件名
    - 退出
    windows 一个程序可能有点难
    KotlinAmai
        15
    KotlinAmai  
       May 11, 2020
    windows 下,os.Rename() ,可以直接改名。没法直接删除。os.Remove 报 Access is denied.
    lniwn
        16
    lniwn  
       May 11, 2020
    这种一般都可以释放一个中间脚本来完成的,windows 释放 bat,linux 释放 sh 或者 python
    ropon
        17
    ropon  
    OP
       May 11, 2020
    execve(pathname, argv, envp) 加载一个新程序(路径名为 pathname,参数列表为 argv,环境变量列表为 envp )到当前进程的内存。这将丢弃现存的程序文本段,并为新程序重新创建栈、数据段以及堆。通常将这一动作称为执行一个新程序。
    janxin
        18
    janxin  
       May 11, 2020
    一般都是有一个专门的更新程序去做,防止出错
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2927 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 11:43 · PVG 19:43 · LAX 04:43 · JFK 07:43
    ♥ Do have faith in what you're doing.