电报机器人:如何进行自我更新?
Telegram bot: how to do self update?
我有一个 Telegram 帐户并创建了 Telegram 机器人来在远程机器上执行一些操作。
它工作正常。
我修复了机器人中的一些代码并想更新所有计算机上的所有机器人?
即机器人理解命令“/更新”,但如何将新的 .exe 从我的计算机传递给所有机器人并进行自我更新?
您需要用于 cmd 的外部脚本,您的机器人将在收到“/update”命令后 运行。此脚本应首先停止您的机器人并替换 .exe 文件和 运行 新的 .exe 文件。
我也写过这样一个带有自我更新机制的bot
要更新机器人,我只需通过 Telegram 发送新的 .exe,但任何其他方法都可以正常工作。
基本上,我会执行以下操作:
- 用 file_id 调用
getFile
获取路径。
- 使用不同的可执行文件启动一个新进程。就我而言,我还通过了文件下载的 URL。
- 退出旧进程。
- 新进程替换旧的可执行文件并(重新)启动机器人。
在 windows 上,您无法在 运行ning 时更改 .exe。
编辑:
我 运行 我的机器人作为 windows 服务,这让事情变得有点复杂,但也更容易:
- 在退出进程之前,我告诉 scm 服务已停止。
- 更新后,我通过 scm 再次启动服务,而不是使用 CreateProcess。
如果 bot 运行 是 SYSTEM 用户,permissions/UAC 不是问题。
否则允许服务用户编写可执行文件并启动进程。
如果您从桌面 运行 程序,那么 UAC 可能是个问题:如果 运行 作为管理员,您没问题。启动的进程继承管理员访问权限。如果不是 运行 作为管理员... 那么您的机器人 运行 所在的用户需要对可执行文件的写入权限。
我有一个 Telegram 帐户并创建了 Telegram 机器人来在远程机器上执行一些操作。 它工作正常。 我修复了机器人中的一些代码并想更新所有计算机上的所有机器人?
即机器人理解命令“/更新”,但如何将新的 .exe 从我的计算机传递给所有机器人并进行自我更新?
您需要用于 cmd 的外部脚本,您的机器人将在收到“/update”命令后 运行。此脚本应首先停止您的机器人并替换 .exe 文件和 运行 新的 .exe 文件。
我也写过这样一个带有自我更新机制的bot
要更新机器人,我只需通过 Telegram 发送新的 .exe,但任何其他方法都可以正常工作。
基本上,我会执行以下操作:
- 用 file_id 调用
getFile
获取路径。 - 使用不同的可执行文件启动一个新进程。就我而言,我还通过了文件下载的 URL。
- 退出旧进程。
- 新进程替换旧的可执行文件并(重新)启动机器人。
在 windows 上,您无法在 运行ning 时更改 .exe。
编辑:
我 运行 我的机器人作为 windows 服务,这让事情变得有点复杂,但也更容易:
- 在退出进程之前,我告诉 scm 服务已停止。
- 更新后,我通过 scm 再次启动服务,而不是使用 CreateProcess。
如果 bot 运行 是 SYSTEM 用户,permissions/UAC 不是问题。 否则允许服务用户编写可执行文件并启动进程。
如果您从桌面 运行 程序,那么 UAC 可能是个问题:如果 运行 作为管理员,您没问题。启动的进程继承管理员访问权限。如果不是 运行 作为管理员... 那么您的机器人 运行 所在的用户需要对可执行文件的写入权限。