澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

澳门新浦京娱乐场网站ClickOnce布置Winform程序的全

    一直以来程序安装与更新都是各开发者的入门知识。

1. ClickOnce简介

微软官方对ClickOnce的解释是:ClickOnce 是一项部署技术,您可以利用这项技术来创建基于 Windows 的自行更新的应用程序,并且安装和运行这类应用程序所需的用户交互最少。

使用用ClickOnce主要解决了程序部署中的几个问题:

  • 更新应用程序困难。使用 Microsoft Windows Installer 部署,每次更新应用程序时,用户都可以安装更新(msp 文件)并将其应用到已安装的产品中;使用 ClickOnce 部署,可自动提供更新。只有更改过的应用程序部分才会被下载,然后会从新的并行文件夹重新安装完整的、更新后的应用程序。
  • 对用户的计算机的影响。使用 Windows Installer 部署时,应用程序通常依赖于共享组件,这便有可能发生版本冲突;而使用 ClickOnce 部署时,每个应用程序都是独立的,不会干扰其他应用程序。
  • 安全权限。Windows Installer 部署要求管理员权限并且只允许受限制的用户安装;而 ClickOnce 部署允许非管理用户安装应用程序并仅授予应用程序所需要的那些代码访问安全性权限。

简单点说就是ClickOnce部署的程序可以自动更新,近乎绿色,且对程序的权限执行权限拥有更细的粒度。

下面是ClickOnce的基本架构图(图片来源)

澳门新浦京娱乐场网站 1

  在项目的发布选项卡中可以为应用程序选择两种ClickOnce部署模式:

一. 摘要

  前两天在博客上发布了一篇英文的自动更新组件文章Release a AutoUpdater tool,那么在这篇文章中,我们也对其功能进行一些简单说明,这个组件非常简单,所以大家可以下载进行一些改进。众所周知,对于一般的软件开发,在开始的时候都会有一个技术选型的阶段,最大的选型就是首先要确定是选择Client/Server模式还是Browser/Server模式。综合而论:两者各有优劣,在很多方面都不能被对方互相取代,如在适用Internet、维护工作量等方面,B/S比C/S要强很多;但在运行速度、数据安全、人机交互等方面,B/S就远不如C/S那么强大。所以综上所述,凡是C/S的强项,便是B/S的弱项,反之亦然。由于今天讨论的是自动更新组件,所以接下来我们就往这方面细讲,既然C/S模式在运行速度、数据安全、人机交互有这么多的优点,尤其是客户端技术日益发展的今天,如何解决客户端的部署与自动升级问题便是一个非常重要的问题。

Windows Installer部署的缺点是每次应用程序更新,用户都必须重新安装整个应用程序,在很多情况下会给用户带来许多麻烦。本小节通过回答ClickOnce 部署这个问题,向读者介绍另外一种自动更新的部署方式。

  对于大型项目,更新可以花大量的时间与各种高阶技术进行处理。但对于小型程序甚至是特定单位的小众用户群体的程序有没有更简单的办法呢?

2. 发布站点建立

我们先来看一下使用ClickOnce部署Winform程序后的发布界面,只要点击Install即可从部署的服务器下载程序安装运行了。

澳门新浦京娱乐场网站 2

所以这里涉及到站点的建立,在Web服务器上建立一个站点以供发布新的ClickOnce包。

在建立站点前,我们需要如下图确认这两个组件是否已经启用。

澳门新浦京娱乐场网站 3

启用后,建立一个站点,路径选择一个自己建立的空目录即可,其他的Web服务器的设置这里不再赘述。

  该应用程序只能联机使用

二. 本文提纲

· 1.摘要

· 2.本文提纲

· 3.为什么不使用ClickOnce

· 4.简要介绍

· 5.项目中如何使用

· 6.具体效果

· 7.维护与下载

· 8.总结

 

  Microsoft Visual Studio针对WinForm程序就内置了升级功能,无需要编码,只需要在发布的时候配置即可完成。

3. 配置ClickOnce程序

在Winform项目上右键打开属性界面,配置好相关的编译属性,关于编译属性的详细配置可以参见前一篇文章:关于Winform编译配置那些事。

切换到发布标签,如下图所示。

澳门新浦京娱乐场网站 4

在发布目录里面,可以选择Web、FTP、文件路径模式,这里我们填上我们之前配置好的空的Web站点即可。

在安装模式里面,支持两种安装模式:联机或脱机可用性。一般我们选择用户即使在断线的情况下也能使用发布的应用程序。

点击“程序文件”,打开对话框。

澳门新浦京娱乐场网站 5

这里可以选择哪些文件可以发布到ClickOnce中,以便发布到客户端里面。

默认是将程序编译出的文件包含在ClickOnce包中,这里会遇到一个问题:如何将其他文件如一些说明文档在项目里更新后同时自动打包进部署包里。

比如我们在项目里面添加了一个Readme.txt,默认在我们发布新包时此文件是不会发布进去的。

如果我们需要每次发布进去,只要在Readme.txt上右键打开属性,配置这两个值即可。

澳门新浦京娱乐场网站 6

而在必要组件对话框里面,ClickOnce会自动分析出需要的必要组件,当然你也可以自己选择必要组件,并可以配置是从供应商的页面下载组件、从我们自己配置的发布路径下载或者其他路径。

澳门新浦京娱乐场网站 7

使用ClickOnce发布的程序一个最大的特点就是能够自动更新,即当运行的时候发现发布服务器上有新版本后即会自动更新后再运行,当然更新的策略也可以配置,我们打开“更新”对话框。

澳门新浦京娱乐场网站 8

可以选择在程序启动前还是启动后更新程序。

或者按照时间间隔去检查更新并更新程序。

或者强制用户更新到某个版本。

也可以配置更新包在其他某个路径。

打开“属性”对话框,可以设置一些发布的基本属性。

澳门新浦京娱乐场网站 9

如发布人、套件名称、程序名称等等,这里的一些设置会影响到部署页面的信息和用户安装后的目录。

澳门新浦京娱乐场网站 10

当然这里还可以设置如:刻录成CD安装包后是否插入CD就自动运行,是否用户安装后在桌面创建快捷方式等等,可以自己去点开设置自己需要的东西,就不一一介绍了。

还可以设置是自动增加版本号还是自己设置,这里的版本号设置最好遵照版本号的使用原则,否则后期维护起来会很混乱,好的习惯往往会让你事半功倍。

澳门新浦京娱乐场网站 11

  该应用程序也可以脱机使用(可以从“开始”菜单启动)

三. 为什么不使用ClickOnce

  在前面的摘要中我们简单介绍了自动更新功能的重要性,在这一小节里我们来谈一下为什么不使用微软给我们提供的自动更新组件ClickOnce,大家都知道ClickOnce给我们提供了很多功能:简单说来,ClickOnce 应用程序就是任何使用 ClickOnce 技术发布的 Windows 窗体或控制台应用程序。可以采用三种不同的方法发布 ClickOnce 应用程序:从网页发布、从网络文件共享发布或是从媒体(如 CD-ROM)发布。ClickOnce 应用程序既可以安装在最终用户的计算机上并在本地运行(即使当计算机脱机时也可以运行),也可以仅以联机模式运行,而不在最终用户的计算机上永久安装任何内容。ClickOnce 应用程序可以自行更新;这些应用程序可以在较新版本变为可用时检查较新版本,并自动替换所有更新的文件。开发人员可以指定更新行为;网络管理员也可以控制更新策略,如将更新标记为强制性的。最终用户或管理员还可以对更新进行回滚,使应用程序恢复到早期的版本。

  从上面大家可以看出ClickOnce 无疑是微软对Client/Server模式部署的最佳解决方案,但正是因为它的功能特别强大而且又要使用相当简单,所以在产品的封装上就特别严实,基本上就暴露了一些简单的操作接口,这样就无形把一些定制化的操作拒之于门外,比如:

1,用户不能自己指定安装路径。

2,对自动更新流程不能做定制化的操作。

3,对自动更新的UI不能定制化的设计。

正因为这几个原因,所以很多企业都会做一些定制化的组件来实现自动更新的功能,基于此,我们这里也实现了一个非常简单的自动更新组件.

【出现频率】★★★★★

  首先Demo程序已经写好,发布流程如下:

4. 发布ClickOnce包

在发布前,我们再说两个东西,那就是代码访问安全和程序签名。

  • 代码访问安全:ClickOnce 应用程序受 .NET Framework 中代码访问安全性约束的限制,以帮助限制代码访问受保护的资源和操作的权限。 因此,了解代码访问安全性的含义以相应地编写 ClickOnce 应用程序是十分重要的。 您的应用程序可以使用完全信任或使用部分区域(如 Internet 区域和 Intranet 区域)来限制访问权限。
  • 程序签名:ClickOnce 使用证书验证应用程序发行者的真实性,并使用证书为应用程序和部署清单签名,以证明文件未被篡改。 签名是一个可选的步骤,它会使在生成清单以后更改应用程序文件更容易。 然而,在没有签名清单的情况下,很难确保应用程序安装程序在受到中间人安全攻击时不被篡改。 出于这个原因,我们建议您对应用程序清单和部署清单进行签名,以帮助保护您的应用程序。

这部分的解释和详细介绍可以看MSDN里面的保护应用程序章节。

然后点击发布按钮即可,发布成功后IE会自动打开发布好的页面,你只需要将发布的地址给需要安装此程序的客户就可以轻松完成程序的部署了。

  在这里,我们姑且分别称它们为联机模式和脱机模式。联机模式要求运行应用程序的机器必须与部署应用程序的服务器保持联机才能使用,因为每次运行应用程序都要从服务器的应用程序发布页面(通常是publish.htm)或者由自己创建的快捷方式启动(链向发布页面的setup.exe)。它会联机到服务器验证应用程序并自动下载最新版本到本机的应用程序缓存区(以后简称缓存区),然后启动缓存区中的应用程序。在这个过程中它不会创建卸载程序,也不会自动创建启动应用程序的任何快捷方式。感觉就是在应用程序发布页面上点击“运行”启动了应用程序,关闭之后就不存在了,但是它仍然存放在缓存区。所以在发布联机应用程序时是不需要设置更新的(每次运行的一定是最新的版本),“更新”选项是不可用的。

四. 简要介绍

其实自动更新的原理很简单,分析起来无非就是简单的几步操作,当然实现方式也是大同小异,这里我们就选一种较简单的方式:

1.启动主程序,主程序里面调用升级程序,升级程序连接到IIS或者FTP。

2.升级程序获取服务器端XML配置文件中新版本程序的更新日期或版本号或文件大小。

3.升级程序获取原有客户端应用程序的最近一次更新日期或版本号或文件大小,然后两者进行比较;如果新版本日期>原有程序的最新日期,则提示用户是否升级;或如果新版本版本号>原有程序的版本号,则提示用户是否升级;再或如果新版本文件大小>原有程序的文件大小,则提示用户是否升级。本文主要采用一般的做法,就是通过版本号来进行对比。

4.如果用户选择升级,则获取下载文件列表;

5.在本地建立与远程IIS或者FTP相应的临时目录,然后下载到这个临时目录文件下;

6.删除旧的主程序,拷贝临时文件夹中的文件到相应的位置;

8.结束升级流程并重新启动主程序。  

根据前面的流程,我们可以简单设计如下的项目:

澳门新浦京娱乐场网站 12 

                                                    图1

具体类介绍:

IAutoUpdater.cs         提供外部调用的接口

AutoUpdater.cs          该组件的主操作类

Autoupdater.config      本地配置文件

DownloadConfirm.cs    提示是否有更新页面

DownloadProgress.cs    下载进度页面

CommonUnitity.cs     一些常用功能

Config.cs         当更新完毕之后需要更新Config,所以这里需要一个提供序列化的Config类

ConstFile.cs      一些常量文件

DownloadFileInfo.cs     需要下载的文件实体类

LocalFile.cs     本地文件实体类

RemoteFile.cs     远程文件实体类

UpdateFileList.cs     本地的实体类集合

代码非常简单,具体可以下载进行查看,所以这里就不做过多阐述。

 

  澳门新浦京娱乐场网站 13

5. 问题补遗

  • 关于签名过期的问题可以参考园友许海彪的这篇文章:解决ClickOnce签名过期问题。
  • 关于ClickOnce信任文件大小的问题,修改注册表HKEY_CURRENT_USERSoftwareClassesSoftwareMicrosoftWindowsCurrentVersionDeployment
    做成一项“OnlineAppQuotaInKB”的DWROD值即可。

澳门新浦京娱乐场网站 14澳门新浦京娱乐场网站 15

五. 项目中如何使用

第一步:Host更新的版本到服务器

  如果需要让客户端获取最新的版本,首先我们需要开发人员编译源代码并生成文件,然后拷贝到FTP或者IIS目录下,运行一个自动生成XML文件的程序,把所有的文件都自动生成到一个XML文件,详细见下图:

                                图2

第二步:配置本地的Config

  经过第一步的流程,这一步要做的就是配置本地的Config用于监测并下载远程IIS或者FTP下需要更新的文件,具体如下图所示:

澳门新浦京娱乐场网站 16

                                                    图3

第三步:修改主程序

  首先把AutoUpdater这个DLL引入我们的主项目,然后在主项目中添加如下代码,当然你可以根据自己的需要进行书写,这个DLL提供了两个外部接口,一个接口用于判断是否有更新及下载,另一个接口则是用于更新出错时进行回滚操作,具体代码如下:

      #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

使用就是这么简单,更详细的操作,大家可以下载源码,也正因为它的简单,所以大家可以对其修改以满足具体项目的需求。

【关键考点】

  澳门新浦京娱乐场网站 17

6. ClickOnce的一个缺点

ClickOnce使用下来我觉得一个最大的缺点就是不让用户选择安装的问题,默认会放在当前用户的 Documents and Settings 文件夹中 Local Settings 目录下的一系列隐藏目录。

设计的初衷是为了为应用程序存储提供一个位置,ClickOnce从用户那里接管了管理应用程序物理安装的任务。 通过对所有应用程序及其不同版本的程序集和数据文件进行独立保存,缓存还有助于隔离应用程序。

这样限制了ClickOnce的部署路径就很大方面限制了对ClickOnce的选择使用,真希望微软能把这个功能点改进掉。

希望你看到这个缺点的时候不要心底一凉,就像我当时发现有这个缺点时候的心情,按需选择就好。 :)

  那么我们自然而然的意识到,部署为联机模式的应用程序,是不存在卸载这一说的。我们能做的只是清空缓冲区的文件。这个缓冲区在类似C:Documents and SettingsAdministratorLocal SettingsApps2.0(2000,XP,2003系统是"%USERPROFILE%Local Settingsapps2.0";Vista系统是"%USERPROFILE%AppDataLocalApps2.0"和"%USERPROFILE%AppDataRoaming")的目录中创建随机名称的文件夹,用于存放应用程序缓存文件;还存在一个Data文件夹,其中存放的也是随机名称的文件夹,用于存放应用程序的数据缓存文件。我们可以通过Windows SDK6中的mage.exe -cc命令将这里的联机缓存文件清空(参见:《清单生成和编辑工具 (Mage.exe)》)。

六. 具体效果

当我们运行主程序(WinForm或者WPF),如果服务器上有最新的版本,就会弹出如下页面进行提示并让用户选择是否更新。

澳门新浦京娱乐场网站 18

                                                    图4

当用户不需要更新时,可以选择Skip按钮跳过并继续主程序流程,反之则进入如下页面。

澳门新浦京娱乐场网站 19

                                                    图5

在下载的过程中,用户可以选择Cancel停止下载并重新回到主流程。

ClickOnce

 

  mage.exe所在目录:

七. 维护与下载

该组件已经托管到CodePlex,所以大家可以到上面下载其源代码,具体地址:

澳门新浦京娱乐场网站 20 

                                                    图6

ClickOnce的特点

 澳门新浦京娱乐场网站 21

  C:Program FilesMicrosoft SDKsWindows澳门新浦京娱乐场网站,v6.0A澳门新浦京娱乐场网站ClickOnce布置Winform程序的全方位,程序自己更新之公布。binmage.exe

八. 总结

  我们这篇文章简单的讲解了一个简单的自动更新组件,由于它比较简单而且功能单一,所以没有花费大量的篇幅进行论述,感兴趣的读者可以下载其源码。后面我会把自己开发的一套MVVM框架也托管上去,由于目前对Silverlight的支持还不太好,所以正在持续做相关的改进,其中借鉴了一些其他优秀框架的思想并且融入了一些实际应用场景,所以到时也希望大家能够多多指教!

ClickOnce应用程序的发布

  从此步开始,可以看出发布有几种经典模式,选择任何一种,最后生成的安装程序会跟你选择的不同而不同,先从默认的来说:

  Setting environment for using Microsoft Visual Studio 2008 x86 tools.e:Program FilesMicrosoft Visual Studio 9.0VC>mage -?命令 -New <文件类型> -n -Update <文件名> -u -Sign <文件名> -s -ClearApplicationCache -cc -Help [verbose] -h -?Options -AppCodeBase <路径> -appc -AppManifest <路径> -appm -CertFile <文件名> -cf -CertHash <哈希> -ch -FromDirectory <路径> -fd -IconFile <文件路径> -if -IncludeProviderURL -ip -Install -i -Name <名称> -n -Password <密码> -pwd -Processor <处理器> -p -ProviderURL

 

  1.  从CD-ROM或DVD-ROM

该应用程序只能联机使用 该应用程序也可以脱机使用(可以从开始菜单启...

【考题分析】

        

ClickOnce是一种部署技术,该技术是通过最低程度的用户交互来安装和运行的、自动更新的、基于Windows的应用程序。ClickOnce提供了多种部署方式,它可以将部署在ASP.NET上的一个Web站点发布。ClickOnce主要有以下2个特点:

澳门新浦京娱乐场网站 22

 

  1. 1 该应用程序不检查更新

(1)无需干预

澳门新浦京娱乐场网站 23

ClickOnce的部署过程无需干预。ClickOnce部署将应用程序放置在下载缓存中,这不会对本地机器的性能产生多少影响。正是出于安全方面的考虑,在下载缓存执行的应用程序只有有限的安全特权。

  点击完成找到发布文件夹:

 

澳门新浦京娱乐场网站 24

(2)自动升级

 

对于需要经常升级的应用程序,ClickOnce应用程序的自动升级特点是尤其有用的。在Windows Installer技术模式下,部署一个需要经常升级的应用程序是耗时繁琐的过程。ClickOnce应用程序只需要一次部署,即可以自动联机升级。

   执行setup.exe进行安装,安装后可以看到开始菜单有快捷方式,程序和功能也可以看到:

 

澳门新浦京娱乐场网站 25

注意:客户端机器必须支持.NET Framework,在该部署中桌面电脑是受控的。ClickOnce应用程序可以用传统方式来部署,但是自动升级需要在线连接。

 

 

澳门新浦京娱乐场网站 26

在Visual Studio中的ClickOnce部署是自动进行的,这包括清单文件和Web服务器配置文件的创建。开发人员可以使用“发布向导”来为ClickOnce部署安装一个应用程序。在项目MyClickOnceApp右键菜单→属性→发布,如图2.9所示:

 

澳门新浦京娱乐场网站 27 

   1. 2 该应用程序从以下位置检查更新

图2.9  部署安装应用程序

 澳门新浦京娱乐场网站 28

 

澳门新浦京娱乐场网站 29

 

 

可以依据项目需要修改相应的版本、发布网站的地址以及更新条件等,运行“发布向导”。在图2.9中,“指定发布此应用程序的位置”可以选择磁盘路径、文件共享、FTP服务器、网站这4种发布方式,笔者选择网站的形式发布。图2.10、图2.11、图2.12展示了发布向导的3个步骤。这样,ClickOnce应用程序完成了它的发布。用户通过访问的Web站点的publish.htm(此为默认配置,也可以自行修改)页面就可以安装相应的程序。

  2. 从网站

澳门新浦京娱乐场网站 30 

澳门新浦京娱乐场网站 31

图2.10  指定发布应用程序的位置

澳门新浦京娱乐场网站 32

 

  2.1 是,该应用程序可以联机或脱机使用

 

澳门新浦京娱乐场网站 33

澳门新浦京娱乐场网站 34

  2.2 否,该应用程序只能联机使用

图2.11  选择是否联机使用

澳门新浦京娱乐场网站 35

 

  3 从UNC路径或文件共享

 

澳门新浦京娱乐场网站 36

澳门新浦京娱乐场网站 37

澳门新浦京娱乐场网站 38

图2.12  发布准备就绪

  3.1 是,该应用程序可以联机或脱机使用

 

澳门新浦京娱乐场网站 39

 

  3.2  否,该应用程序只能联机使用

【答案】

澳门新浦京娱乐场网站 40

ClickOnce是一种部署技术,使用该技术可创建自行更新的基于Windows的应用程序,这些应用程序可以通过最低程度的用户交互来安装和运行。通过Visual Studio的发布向导,程序员可以快速创建ClickOnce应用程序。

 

   综合上面3大类安装更新方式,发现很多相似之处。结合个人在实际中的应用觉得安装到客户机上,然后通过网站来提供更新是比较理想的模式。

  缺点:安装路径无法自己定义。

 

本文由澳门新浦京娱乐场网站发布于www.146.net,转载请注明出处:澳门新浦京娱乐场网站ClickOnce布置Winform程序的全