【问题标题】:How application can update itself? [closed]应用程序如何自我更新? [关闭]
【发布时间】:2017-11-09 21:39:56
【问题描述】:

作为 Notepad++ 的粉丝,我看到当有新的更新可用时,会发生以下情况:

  • Notepad++ 告诉你有更新
  • 当你点击“好的,让我们更新”时,它会连接到服务器
  • 它会下载更新文件
  • Notepad++ 已关闭,更新文件开始运行
  • UAC 询问您是否要运行该文件
  • 如果是,则安装更新
  • 系统要求您重新运行 Notepad++

我想在我的 .NET 桌面应用程序中构建此功能。我不知道的是文件下载后:

  • 我的应用程序将如何告诉操作系统运行更新文件?
  • 我的应用程序没有在计算机上安装文件的权限。它将如何绕过它?
  • 由于在更新过程中需要更改当前应用程序,我的应用程序将如何关闭?

【问题讨论】:

  • 这是三个问题,我认为对 SO 来说太宽泛了 - 你做过任何研究吗? “c# 自我更新程序”的第一个谷歌点击是 stackoverflow.com/questions/12787761/… - 并且链接到更多类似的问题。

标签: c# .net windows desktop-application


【解决方案1】:

我的应用程序将如何告诉操作系统运行更新文件?

您的 c# 应用程序可以通过使用 Process.Start 方法(存在于 System.Diagnostics 中)轻松调用其他进程,甚至可以根据需要控制它。

我的应用程序无权在计算机上安装文件。它将如何绕过它?

更新程序是一个单独的进程,它可以向自己询问管理员权限(通过调用 UAC 对话框)。

通过实现适当的 app.manifest 文件,c# 应用程序可以轻松地请求管理员权限:

在 Visual Studio 上,您可以通过选择“项目”->“添加新项目”-> 应用程序清单来执行此操作,打开它并更改此行

 <requestedExecutionLevel level="asInvoker" uiAccess="false" />

有了这个

 <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

由于在更新过程中需要更改当前应用程序,我的应用程序将如何关闭?

您的更新程序应用程序可以在完成后关闭您的主进程,或者您的主进程可以在更新程序完成后自行关闭(通过使用某种 IPC)。

另一种选择是从主应用程序启动更新程序,然后立即关闭主应用程序。

【讨论】:

    猜你喜欢
    • 2012-11-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2010-09-21
    • 2021-09-25
    • 2021-12-27
    • 1970-01-01
    • 2010-12-12
    相关资源
    最近更新 更多