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

C# 电报机器人:如何进行自我更新?,c#,.net,telegram-bot,C#,.net,Telegram Bot,我有一个电报帐户,并创建了电报机器人在远程机器上执行一些操作。 它工作正常。 我修复了机器人中的一些代码,想更新所有计算机上的所有机器人吗 也就是说,bot理解命令“/update”,但如何将新的.exe从我的计算机传递给所有bot并进行自我更新?您需要cmd的外部脚本,该脚本将在获得“/update”命令后由bot运行。此脚本应首先停止bot并替换.exe文件,然后运行新的.exe文件。您需要cmd的外部脚本,该脚本将在获得“/update”命令后由bot运行。此脚本应首先停止您的bot并替换

我有一个电报帐户,并创建了电报机器人在远程机器上执行一些操作。 它工作正常。 我修复了机器人中的一些代码,想更新所有计算机上的所有机器人吗


也就是说,bot理解命令“/update”,但如何将新的.exe从我的计算机传递给所有bot并进行自我更新?

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

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

我还编写了一个具有自我更新机制的bot

要更新bot,我只需要通过电报发送新的.exe,但任何其他方法都可以

基本上,我是这样做的:

  • 使用文件id调用
    getFile
    ,以获取路径
  • 使用不同的可执行文件启动新进程。在我的例子中,我还传递了文件下载的URL
  • 退出旧进程
  • 新进程将替换旧的可执行文件并(重新)启动bot
在windows上,无法在.exe运行时更改它

编辑: 我以windows服务的形式运行我的机器人,这使事情变得更复杂,但也更容易:

  • 在退出流程之前,我会告诉scm服务已停止
  • 更新后,我通过scm再次启动服务,而不是使用CreateProcess
如果bot以系统用户身份运行,则权限/UAC不是问题。 否则,允许服务用户编写可执行文件并启动进程


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

我还编写了一个具有自我更新机制的bot

要更新bot,我只需要通过电报发送新的.exe,但任何其他方法都可以

基本上,我是这样做的:

  • 使用文件id调用
    getFile
    ,以获取路径
  • 使用不同的可执行文件启动新进程。在我的例子中,我还传递了文件下载的URL
  • 退出旧进程
  • 新进程将替换旧的可执行文件并(重新)启动bot
在windows上,无法在.exe运行时更改它

编辑: 我以windows服务的形式运行我的机器人,这使事情变得更复杂,但也更容易:

  • 在退出流程之前,我会告诉scm服务已停止
  • 更新后,我通过scm再次启动服务,而不是使用CreateProcess
如果bot以系统用户身份运行,则权限/UAC不是问题。 否则,允许服务用户编写可执行文件并启动进程


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

ok,thnx。如果远程计算机上的UAC需要管理员权限怎么办?如果机器人是windows服务呢?好的,thnx。如果远程计算机上的UAC需要管理员权限怎么办?如果bot是windows服务怎么办?