Golang Go语言编写更新程序改名自删疑问

发布于 1周前 作者 nodeper 来自 Go语言

Golang Go语言编写更新程序改名自删疑问

需求:

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

疑问:

  • Windows 平台 运行 demo.exe 检查更新下载最新版本保存 demo_1.1.exe ,如何自动改名 demo.exe 并自删原程序
  • Linux 平台 运行 demo 检查更新下载最新版本保存 demo_1.1_amd64,如何自动改名 demo 并自删原程序

更多关于Golang Go语言编写更新程序改名自删疑问的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

19 回复

你这是要写个病毒?

更多关于Golang Go语言编写更新程序改名自删疑问的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


下载完了,校验然后就退出原来的程序,启动一个清理程序清理以及改名不就可以了?

启动第三个程序,
a b c
a 升级为 b
a 退出 调用 c 删除 a

一个程序能实现吗

或者 a 就不做这些功能,,,,c 一直在监控,,更新删除都由 c 来做。

一个程序应该不行吧,,,会占用着,,删不掉。。

估计要看看底层了。。。让程序运行在内存,,然后删掉自己,,否则会一直锁着吧,,,不懂。。。

我在写桌面程序的时候是做了一个中转应用执行脚本去操作的

a 更新,下载 a_update
a 启动 a_update,传参,a 退出
a_update 删除 a
a_update 复制 a_update 到 a
a_update 启动 a,传参,a_update 退出
a 删除 a_update

第一个程序检测到更新的时候,调用第二个程序(更新程序),结束第一个程序进程并进行更新,然后启动更新后的程序,最后结束更新程序。

写病毒还是外挂?

linux 下即使程序在运行也能删除运行文件,但是程序不会结束,会在目录下留下一个.开头的临时文件,所以在 linux 下可以直接替换,但是需要手动重启一下程序。windows 下就不清楚了。

linux 好像可以吧
- 下载新的
- 把自己删了
- 把新的改名为自己的文件名
- 退出
windows 一个程序可能有点难

windows 下,os.Rename() ,可以直接改名。没法直接删除。os.Remove 报 Access is denied.

这种一般都可以释放一个中间脚本来完成的,windows 释放 bat,linux 释放 sh 或者 python

execve(pathname, argv, envp) 加载一个新程序(路径名为 pathname,参数列表为 argv,环境变量列表为 envp )到当前进程的内存。这将丢弃现存的程序文本段,并为新程序重新创建栈、数据段以及堆。通常将这一动作称为执行一个新程序。

一般都是有一个专门的更新程序去做,防止出错

在Golang(Go语言)中编写更新程序并实现文件的改名与自删除功能时,需要注意以下几点来确保程序的稳定性和安全性:

  1. 文件锁定:在进行文件操作(如改名或删除)前,确保文件没有被其他进程占用。可以使用文件锁机制来避免并发冲突。

  2. 原子操作:使用系统的原子操作函数(如os.Rename)来重命名文件,以避免因中断导致的文件状态不一致。Go语言的os包提供了这些基本的文件操作函数。

  3. 错误处理:在进行文件操作时,务必做好错误处理。例如,检查文件是否存在、是否有权限进行重命名或删除等操作。

  4. 自删除机制:对于自删除功能,可以通过在程序中调用os.Remove函数来实现。但请注意,一旦文件被删除,将无法恢复,因此在执行此操作前需要格外小心。

  5. 日志记录:在更新过程中,建议记录详细的日志,以便在出现问题时进行排查。

  6. 测试:在正式部署前,对更新程序进行充分的测试,包括模拟各种可能的异常情况,确保程序的健壮性。

  7. 权限管理:确保执行更新程序的用户具有足够的权限来执行文件操作。

综上所述,编写Go语言的更新程序时,需要综合考虑文件锁定、原子操作、错误处理、自删除机制、日志记录、测试以及权限管理等方面,以确保程序的稳定性和安全性。

回到顶部