写点什么

使用 ClickOnce 细分发布版本

  • 2008-09-25
  • 本文字数:1954 字

    阅读完需:约 6 分钟

ClickOnce 是微软在.NET 2.0 框架中发布的一项技术,允许大家在 Visual Studio 中方便地部署和更新.NET 的 Windows 应用程序。部署功能是通过把应用程序文件复制到一个文件夹中、FTP 目录中或者某个 Web 位置上,并同时附加一个清单文件来实现的。清单文件是一个具有.application 扩展名的 XML 文件,它包含了所有程序文件的一个列表,以及类似发布者标识这样的安全相关信息。ClickOnce 应用程序每发布一个新的版本,一个新的子目录就被创建,并把更新的文件放在这个目录中。程序的所有部署版本都是相互独立存在的,这意味着我们只需要识别用户,并把用户导向应用程序适合的版本,从而控制它们需要接受那个版本的程序。

首先,让我们来创建一个简单的 Windows 应用程序,并通过 ClickOnce 来部署它。创建一个新的 Windows 应用程序项目,放置一个标签控件到窗体上,并在 New() 过程中编写一些代码,以便让我们能看到我们拥有的是哪个版本。

<span color="#800080">label1.Text</span> = "Version: " & _ <br></br><span color="#800080">System.Reflection.Assembly.GetExecutingAssembly.GetName.Version.ToString</span>现在,打开项目属性界面并浏览签名(Signing)标签页,勾选“Sign the ClickOnce manifest”复选框,并通过点击“Create Test Certificate”按钮及输入密码来创建一个测试证书。

现在,我们已经拥有证书了,因而可以设置 ClickOnce 部署了。选择发布(Publish)标签页,输入发布位置即安装 URL(你也可以使用底部的发布向导(Publish Wizard)来直接输入这些)。发布位置是将要存放部署文件的物理位置。安装 URL 是用户用于下载和安装应用程序的 URL。我们打算让这个应用程序能够脱机运行,所以选择在“Install Mode and Settings”之下的第二个单选框。为了实现我们控制版本的功能,我们需要把程序文件部署到一个 Web 应用程序的文件夹树中,在选择部署位置时务必注意这一点。

注意,更新选项要通过点击“Updates…”按钮来显示。

至此,我们已经具有了一个可以进行部署的 ClickOnce 应用程序了。一旦部署并安装好,利用显示出来的更新选项设置,应用程序将会在每次启动的时候检查更新。

如果有新版本存在,那么用户将被提示进行更新。

此时,我们已经部署好一个 ClickOnce 应用程序了,接下来可以准备实现版本控制。进行版本细化控制的原理是为主文件.application 设置一个基于 Web 的转向功能. 首先,我们要把.application 扩展名添加到 ISS 的允许文件列表中。这可以通过 IIS 里的 Web 站点属性,设置界面中的 Home Directory 标签页上的 Application Configuration 配置节来实现。

一旦完成这步工作,就可以创建一个新的 WebApplication 并添加一个 Handler 类到其中。

接着,在应用程序的 web.config 文件中注册这个 Handler。Handler 类型的格式是 [Namespace].[ClassName], [Assembly]

<<span color="#800000">httpHandlers</span>><br></br> <<span color="#800000">add</span> <span color="#ff0000">verb</span>="<span color="#0000ff">GET</span>" <span color="#ff0000">path</span>="<span color="#0000ff">*.application</span>" <span color="#ff0000">type</span>="<span color="#0000ff">WebApplication1.MyHandler,WebApplication1</span>"/><br></br>httpHandlers><br></br>system.web><br></br>configuration><br></br>现在,返回到我们的示例 ClickOnce 应用程序,重新打开 Publish 标签页下的 Updates 对话框。输入指向这个 Web 应用程序的更新位置。

最后,编辑我们之前创建的 HttpHandler,让其针对请求返回适合的版本。这里,我们返回一个硬编码的版本,不过一个真实的实现应该处理验证等功能,以提供更好的灵活性。

标头可以在 IIS 中进行配置或如这里所示的在代码中设置。

一些注意事项

在为 ClickOnce 签名使用临时证书时,一旦证书过期,就需要使用一个新的来代替,那么,应用程序的当前安装就不能再升级了,所有用户都必须重新安装应用程序。这是一个已知的缺陷。幸运的是,已经有一种方式能够无限地延长证书的过期时间。访问这个地址来获取详细信息: http://support.microsoft.com/Default.aspx?kbid=925521

使用更新位置来同步部署应用程序清单的位置非常重要。IIS 不能处理未在列表中的文件,所以如果更新路径无效的话你的处理器将永远不会触发。

如果使用 Visual Studio 2008,部署文件夹略有不同。每个版本的.application 文件都放在他们特定的子目录中,而非在主文件夹中。如果你有一个在 VS 2005 下设计的版本方案,并在 VS 2008 中来部署应用程序的话,这就会引起问题。

查看英文原文: Fine Grained Versioning with ClickOnce


志愿参与 InfoQ 中文站内容建设,请邮件至 editors@cn.infoq.com 。也欢迎大家到 InfoQ 中文站用户讨论组参与我们的线上讨论。

2008-09-25 10:554547
用户头像

发布了 254 篇内容, 共 58.9 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

有自动化运维功能的堡垒机有哪些?大家推荐哪款?

行云管家

高可用 堡垒机 IT运维 自动化运维

Photoshop Elements 2020 for Mac(图形处理工具) v18.0(2020.01.20)激活版

mac

苹果mac Windows软件 Photoshop Elements 2020 ps elements 2020

OpenHarmony社区运营报告(2023年7月)

OpenHarmony开发者

OpenHarmony

新利好带动 POSE 持续上扬,月内几近翻倍

西柚子

TIKV节点数据文件误删后不更换服务器快速恢复

TiDB 社区干货传送门

管理与运维 故障排查/诊断

MySQL char和varchar区别

java易二三

MySQL 编程 程序员 计算机

MySQL—修改数据库root用户密码

java易二三

Java MySQL 数据库 程序员 计算机

面试官:说说Spring中@NotEmpty、@NotBlank、@NotNull 的区别和使用

java易二三

编程 程序员 面试 计算机

智慧云 打造您的商城APP,与5G时代社交电商融为一体

知者如C

字节跳动基于火山引擎DataLeap的一站式数据治理架构实践

字节跳动数据平台

大数据 数据中台 企业号 8 月 PK 榜

TiDB 源码编译之 TiUP 篇

TiDB 社区干货传送门

版本测评 新版本/特性解读 7.x 实践

储能pcb的布局注意事项与制造难点

华秋电子

性能测试最佳实践的思考

FunTester

助力农村金融机构数字化转型,原点安全将出席“第十三届中国农村金融机构信息化发展创新大会”

原点安全

数字化转型 农村金融机构

Lighting web 测试使用

TiDB 社区干货传送门

迁移 管理与运维 备份 & 恢复 6.x 实践

直播源码连麦技术功能分享,你要的这里全有

山东布谷网络科技

直播源码

功能更新 | FinClip 7月产品大事记

FinClip

倒计时 1 天!浙江大学、乘云数字、阿里云等多位技术专家教授解读最新运维技术

OpenAnolis小助手

Meetup 龙蜥活动

2023清华博士团暑期社会实践项目圆满结束,合合信息助力科技人才发展

合合技术团队

人工智能 清华大学 博士

【SOP】最佳实践之 TiDB 业务读变慢分析

TiDB 社区干货传送门

性能调优 集群管理 管理与运维 故障排查/诊断

安全易用的运维会诊平台选哪家?可以免费试用吗?

行云管家

运维 IT运维 运维会诊

基金公司数据治理实践,打造“点线面体”的数据治理体系

袋鼠云数栈

数据中台 数字化转型 数据治理 基金 数据中台数据治理

微信技术分享:揭秘微信后台安全特征数据仓库的架构设计

JackJiang

网络编程 即时通讯 IM

Placement Rules in SQL 使用案例

TiDB 社区干货传送门

新版本/特性解读 6.x 实践

INFINI Labs 产品更新 | Easysearch 支持 SQL 查询、Console 告警功能支持邮件等多渠道

极限实验室

sql console 邮件 告警 easysearch

【华秋推荐】新能源汽车中的T-BOX系统,你了解多少?

华秋电子

新唐

揭秘华为云GaussDB(for Redis)丨大key治理

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

CI+JUnit5并发单测机制创新实践 | 京东物流技术团队

京东科技开发者

测试 高并发 单元测试 并发测试 企业号 8 月 PK 榜

文盘Rust -- Mutex解决并发写文件乱序问题 | 京东云技术团队

京东科技开发者

rust mutex 高并发读,高并发写 企业号 8 月 PK 榜

Hutool:一行代码搞定数据脱敏 | 京东云技术团队

京东科技开发者

Jackson hutool 数据脱敏 企业号 8 月 PK 榜

全彩LED电子屏的驱动器有哪几种?

Dylan

电压电流 驱动 恒流源输出电路 LED显示屏 全彩LED显示屏

使用ClickOnce细分发布版本_.NET_David Cooksey_InfoQ精选文章