65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在不使用 IDE 的情况下构建、签名并部署 ClickOnce 应用程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.82/5 (5投票s)

2009年8月30日

CPOL

5分钟阅读

viewsIcon

47547

downloadIcon

1168

如何使用完整的可运行示例,在不使用 Visual Studio IDE 的情况下发布 ClickOnce 应用程序。

引言

ClickOnce 应用程序是无需在客户端计算机上实际安装应用程序即可通过 Internet 交付应用程序的绝佳方式。但是,让 ClickOnce 应用程序能够部署和更新也带来了挑战,特别是当您无法依赖 Visual Studio IDE 来发布应用程序时。

背景

VS IDE 会为您发布 ClickOnce 应用程序;但是,许多人无法依赖此功能,因为他们需要使用命令行工具才能在生产环境中自动部署应用程序。不幸的是,命令行 MSBUILD 工具尚不具备发布 ClickOnce 应用程序的功能。唯一其他发布方法是使用 Mage 工具。但是,在撰写本文时,命令行版本缺少一些关键功能,而 Microsoft 提供的文档也远远不够。这个可运行示例是我和几位 Microsoft 工程师经过数小时研究的结果。希望它能帮助您开始部署应用程序。

附带的 zip 文件包含一个包含两个项目的解决方案。MyApp 是一个 ClickOnce 应用程序,仅用于从网站启动。该应用程序实际上从未安装在客户端计算机上(好吧,并非真正如此,但我稍后会对此进行讨论)。理念是您的应用程序**必须**从 Web 浏览器启动。您为什么要这样做?假设您想让客户端运行一个与 Internet 上的服务或数据库通信的应用程序。如果他们已经从您的网站进行了身份验证,您就可以通过直接从您的网站启动应用程序,来防止用户在 ClickOnce 应用程序中再次进行身份验证。Citrix 的 GotoMeeting 就是这样做的,碰巧它也是一个 ClickOnce 应用程序。MyWebSite 是一个简单的 ASP.NET 项目,用于托管 MyApp。

一些人可能会遇到的 ClickOnce 应用程序问题是更新以前安装的 ClickOnce 应用程序。等等;我不是刚说过 ClickOnce 应用程序未安装在客户端计算机上吗?事实是,“仅在线”应用程序会被缓存,这样您就不必每次都下载应用程序。缓存位置位于用户**AppData** 文件夹内,通常类似于

C:\Users\fasttimes\AppData\Local\Apps\2.0

您可以在此处随意查找 ClickOnce 应用程序的存储位置,但通常删除此目录的内容以清除缓存是安全的。

正如我之前所说,另一个问题是 Mage 命令行工具本身。它缺少一个映射文件扩展名的选项,另一个选项允许您的应用程序接受 URL 参数。我希望 Microsoft 在 Mage 的未来版本中能纠正这些不足之处。

我不会深入探讨这些“缺失”选项的细节,而是解释我如何绕过这个问题。要部署 ClickOnce 应用程序,您需要创建一个清单文件,其中列出了所需的文件以及用于启动应用程序本身的文件。为了进一步增加复杂性,您**必须**使用证书密钥为每个文件签名。我在使用 Mage 的命令行版本时发现的问题是,当它创建应用程序启动文件(在我的演示中称为 *MyApp.application*)时,它缺少一些设置。由于该文件只是一个 XML 文档,我使用了一些批处理文件命令和 Unix 命令 SED 的 DOS 版本来添加那些缺失的部分。在此文件修改后,除了应用程序文件和清单之外,所有要分发的文件都会被添加“.deploy”扩展名。如果未执行此步骤,则任何支持文件(如 DLL 或图标)都不会被下载,您的程序将无法启动。完成所有这些工作后,应用程序文件会使用证书进行签名,然后文件就可以进行分发了。

使用代码

虽然我的演示已准备就绪,但如果您要从头开始构建自己的 ClickOnce 应用程序,请务必在项目属性的安全选项卡中选中“**启用 ClickOnce 安全设置**”复选框。否则,您的应用程序将无法在客户端计算机上运行。

运行演示非常简单。启动 VS 命令提示符(或确保 msbuild.exe 和 mage.exe 的路径在您的环境变量中)。使用 build.bat 文件编译解决方案。如果您愿意,也可以启动 ClickOnceDemo.sln 解决方案文件并从中进行构建,但我个人想要一种 100% 命令行方式来构建和发布。接下来,运行 CreateClickOnce.bat 文件,并提供应用程序的版本号(使用四个有效数字 #.#.#.#)和您的网站名称。第二个参数实际上并非必需,但我添加了它,因为您可能希望在不同版本的网站中使用相同的应用程序。由于一次客户端计算机上只能有一个应用程序实例,您可以通过更改使用的名称来绕过此问题。如果您想了解其工作原理,可以仔细查看批处理文件。

重要的是要注意,您每次调用此批处理文件时都需要递增版本号,否则 ClickOnce 安装程序将认为它已经拥有最新版本而不会下载更新。在自动环境中,我使用 FinalBuilder 等其他代码和应用程序。

构建和运行演示需要运行两个批处理文件,如下所示。请注意,CreateClickOnce 批处理文件执行了所有“Mage 魔术”,并使用了 SED 命令(也包含在内)。它还将所有 ClickOnce 文件复制到 MyWebSite\published 目录。

C:\ClickOnceDemo>build 
 
     . 
 
     . 
 
     . 
 
C:\ClickOnceDemo>CreateClickOnce 1.0.0.0 Test

从 IDE 运行 **MyWebSite**,或者创建一个指向该目录的虚拟目录并进行浏览。通过按下按钮启动 ClickOnce 应用程序。更改参数并再次尝试。

现在,在 IDE 中打开解决方案,向 ClickOnce 应用程序添加一个新按钮并保存文件。再次运行这两个批处理文件,然后进行测试。如果您的更改未出现,您可能忘记在调用 CreateClickOnce 时递增版本号。如果您第一次调用时使用的是 1.0.0.0,请尝试再次调用 1.0.0.1,您的更新应用程序应该可以运行。

历史

  • 2009 年 8 月 29 日 – 首次发布。
© . All rights reserved.