C#-一种用于windows应用程序的自动更新程序的方法

本文关键字:更新 方法 程序 应用程序 windows 用于 一种 C#- | 更新日期: 2023-09-27 18:36:31

我有一个windows应用程序(用C#编写…(,它安装在多个远程工作站上,安装由MSI软件包完成。

程序更改的更新安装正在不时进行,此时,对于每个更新,对于每个工作站,我们需要转到.MSI所在的位置,复制并运行它,然后启动应用程序。

我希望:每当用户尝试启动应用程序时,都会初始化一个后台进程,将安装的版本与.msi位置上的最新版本进行比较,如果需要更新,则会运行安装,然后启动应用程序。

问题是无法从程序内部完成,因为在进行安装/升级时程序无法运行。另一个考虑因素是,并非所有的工作站都在同一时间运行,因此我无法安排及时的升级,也无法在工作站启动时进行升级,因为有时需要在工作站已经运行时进行更新(工作站在我的应用程序旁边有几个功能(。

我已经考虑了几种方法,看起来windows服务可以做到这一点,但我不知道它是否可以"绑定"到程序的初始化,是否可以挂起程序进行必要的检查和更新,而不仅仅是重新启动应用程序。

我对所有的想法都持开放态度,所以请不要对我的想法感到义务。。。

C#-一种用于windows应用程序的自动更新程序的方法

此时,对于每个更新,对于每个站点,我们都需要转到.MSI所在的位置找到了复制它并运行它,然后只启动应用程序。

解雇那个冒充系统管理员的家伙。

除非您在安装程序中做了一些奇怪的事情,否则使用标准软件分发包应该是可行的。见鬼,只要MSI允许管理无ui安装,我就可以只使用active directory而不使用第三方软件进行更新。

你试图解决一个没有问题的问题。在过去的15到20年里,软件分发是一个解决方案。MSI是专门为处理这个问题而创建的,因为其他方法也存在问题。

所以,无论谁假装是你公司的管理者,都需要齐心协力。什么都不做(除了做一个好的MSI(,让管理员做他的工作。

其他一切都会带来很多问题(至少在成本方面(。而且完全不需要它。

我正在更新我的答案,

这就是我们所做的。。。。

  1. 创建安装程序/包(您可以在此处为所有用户安装(
  2. 生成引导程序(https://msdn.microsoft.com/en-us/library/ms165429.aspx您可以使用此工具创建引导程序(http://www.softpedia.com/get/Programming/Other-Programming-Files/Bootstrapper-Manifest-Generator.shtml)

    1. 在引导程序中添加依赖项和其他条件

    2. 设置更新的URL

这将解决你的问题。我回答得太快了,但我们就是这样做的。

谢谢。

关于问题中假设的一些评论和答案:

"我希望:每当用户试图启动应用程序时,都会初始化一个后台进程,将安装的版本与.msi位置上的最新版本进行比较,如果需要更新,则会运行安装,然后启动应用程序。">

只有当MSI在公司的网络服务器上时,这才可能是一种有用的方法。网站可以托管一个web api,您可以将ProductCode、Version、Upgrade发送到该api,它会报告是否有升级、补丁等,以及下载位置。如前所述,在公司域中,只需使用AD即可。

"问题是无法从程序内部完成,因为在进行安装/升级时程序无法运行。">

为什么?Windows安装程序将显示FilesInUse对话框,供最终用户关闭正在运行的应用程序。所以这种情况已经得到了解决,我不确定你在哪里看到了问题。

"…以及它是否可以暂停程序以进行必要的检查和更新,而不仅仅是重新启动应用程序。">

这正是Restart Manager的作用所在。将您的应用程序与RM集成,Windows安装程序将允许您关闭应用程序(保存您需要恢复的任何数据(,然后重新启动,这样您就可以恢复数据,并且用户可以看到最小的中断。一个例子:

http://www.codeproject.com/Articles/772868/Restart-Manager-Support-For-Windows-Application

所以我认为TomTom的观点是正确的——没有必要重新发明AD的功能,也没有必要担心如何更新正在运行的程序,或者在安装程序更新后如何重新启动程序,因为所有这些问题都在几年前就解决了。