电报机器人:如何进行自我更新?

时间:2016-11-12 08:27:05

标签: c# .net telegram-bot

我有一个Telegram帐户并创建了Telegram bot来在远程计算机上执行某些操作。 它工作正常。 我在机器人中修改了一些代码并想要更新所有计算机上的所有机器人?

即。机器人理解命令" / update"但是如何将新的.exe从我的电脑传递到所有机器人并进行自我更新?

2 个答案:

答案 0 :(得分:1)

您需要cmd的外部脚本,在获取“/ update”命令后,您的机器人将运行该脚本。此脚本应首先停止您的bot并替换.exe文件并运行新的.exe文件。

答案 1 :(得分:1)

我还编写了一个带有自我更新机制的机器人。

要更新机器人,我只需通过Telegram发送新的.exe,但任何其他方法都可以。

基本上,我会做以下事情:

  • 使用file_id调用getFile以获取路径。
  • 使用其他可执行文件启动新进程。在我的情况下,我也传递了文件下载的URL。
  • 退出旧流程。
  • 新进程替换旧的可执行文件并重新启动僵尸程序。

在Windows上,您无法在运行时更改.exe。

编辑:

我将我的机器人作为Windows服务运行,这使事情变得更复杂,但也更容易:

  • 在我退出流程之前,我告诉scm该服务已停止。
  • 更新后,我再次通过scm启动服务,而不是使用CreateProcess。

如果僵尸程序以SYSTEM用户身份运行,则权限/ UAC不是问题。 否则,允许服务用户编写可执行文件并启动该过程。

如果你从桌面运行该程序,那么UAC可能是个问题:如果以管理员身份运行,你就可以了。进程已开始继承管理员访问权限。如果不以管理员身份运行......那么运行bot的用户需要对可执行文件的写访问权。