应用程序如何更新自身?

时间:2017-11-09 21:39:56

标签: c# .net windows desktop-application

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

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

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

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

1 个答案:

答案 0 :(得分:1)

  

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

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

  

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

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

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

在Visual Studio上,您可以选择" Project" - > "添加新项目" - >应用程序清单,打开它并更改此行

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

用这个

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

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

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

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