如何在没有ClickOnce的情况下自动更新应用程序?

Toa*_*ums 31 c# deployment

对于我正在进行的项目,我不允许使用ClickOnce.我的老板希望程序看起来"真实"(使用安装程序等).

我已经安装了Visual Studio 2012 Professional,并且一直在使用InstallShield安装程序,它肯定会成为很好的安装程序,但我无法弄清楚如何启用应用程序"自动更新"(也就是说,当它启动时) up,检查以确保它使用的是最新版本).

我被要求对代码进行微小的改动 - 将一个附加内容转换为减法,我真的不希望人们必须卸载旧版本,然后每次我做一个小版本时都要重新安装新版本像这样改变.

如何让应用程序检查更新并安装它们?或者这不可能(或不容易)?

JYe*_*ton 24

关于这个问题已经有很多问题了,所以我会把你推荐给那些人.

您希望确保避免卸载的一件事是,您在每个版本上使用相同的升级代码,但更改产品代码.这些值位于Installshield项目属性中.

一些参考:


小智 6

我认为您应该在codeplex.com http://autoupdater.codeplex.com/上检查以下项目

该示例应用程序使用C#开发为项目名称为“ AutoUpdater”的库。DLL“ AutoUpdater”可以在C#Windows应用程序(WinForm和WPF)中使用。

关于AutoUpdater,有某些功能:

  1. 易于实施和使用。
  2. 检查更新后,应用程序自动重新运行。
  3. 更新过程对用户透明。
  4. 为了避免使用多线程下载阻塞主线程。
  5. 能够升级系统以及自动更新程序。
  6. 在不同系统中使用时不需要更改的代码,可以在库中进行编译。
  7. 易于用户下载更新文件。

如何使用?

在要自动更新的程序中,只需在Main过程中调用AutoUpdate函数。自动更新功能将使用从网站/ FTP中的文件读取的版本来检查版本。如果程序版本低于读取的版本,则程序将下载自动更新程序并启动它,并且该函数返回True,这意味着将运行自动更新,并且应关闭当前程序。自动更新程序从要更新的程序中接收几个参数,并执行必要的自动更新,然后启动更新的系统。

  #region check and download new version program
  bool bHasError = false;
  IAutoUpdater autoUpdater = new AutoUpdater();
  try
  {
      autoUpdater.Update();
  }
  catch (WebException exp)
  {
      MessageBox.Show("Can not find the specified resource");
      bHasError = true;
  }
  catch (XmlException exp)
  {
      bHasError = true;
      MessageBox.Show("Download the upgrade file error");
  }
  catch (NotSupportedException exp)
  {
      bHasError = true;
      MessageBox.Show("Upgrade address configuration error");
  }
  catch (ArgumentException exp)
  {
      bHasError = true;
      MessageBox.Show("Download the upgrade file error");
  }
  catch (Exception exp)
  {
      bHasError = true;
      MessageBox.Show("An error occurred during the upgrade process");
  }
  finally
  {
      if (bHasError == true)
      {
          try
          {
              autoUpdater.RollBack();
          }
          catch (Exception)
          {
             //Log the message to your file or database
          }
      }
  }
  #endregion
Run Code Online (Sandbox Code Playgroud)