发布ClickOnce应用程序步骤与URL传参应用
一、ClickOnce应用程序发布配置
-
签名-为ClickOnce清单签名 → 取消勾选
-
签名-为程序集签名 → 取消勾选
-
安全性-启用ClickOnce安全设置 →勾选
-
安全性-这是完全可信的应用程序 →勾选
-
发布-发布文件夹位置
-
发布-安装文件夹
-
发布-该应用程序可以脱机使用 →勾选
-
发布-随每次发布自动递增修订号 →勾选
-
发布-应用程序文件 →检查依赖项是否被包含
-
发布-系统必备组件
根据该应用程序的运行环境,选取系统必备组件,一般为系统默认勾选
指定系统必备组件的安装位置,如果勾选第一项,在安装ClickOnce应用程序时,会从微软官网下载运行环境必备组件,如果不能访问外网,或网络不稳定,会导致下载失败。建议勾选第二项,即使是局域网软件也可以正常安装运行组件。
11. 发布-更新
应用程序应该检查更新 →勾选
应用程序启动前 →勾选。勾选此项,可以让ClickOnce应用程序在启动前自动检查更新,以保证每次运行都是最新的版本。
指定该应用程序要求的最低版本 →勾选。同时需设置版本号需与发布的版本号一致,每次都需要手动设置一下,可保证客户端应用程序可以在启动时自动下载更新并安装,否则会容易被用户手动跳过版本更新。
12. 发布-选项
部署-发布后打开部署网页 →取消勾选。如果勾选了,则会在发布结束自动打开“部署网页”里填写的自动生成的静态网页,应该网页界面比较丑陋,一般不使用该网页。
部署-使用“.deploy”文件扩展名 →取消勾选。如果勾选了,则可导致应用程序安装可能不成功,提示验证不通过或部署清单缺失之类。
13. 发布-选项
清单-允许用应用程序传递URL参数 →勾选。为从外部启动ClickOnce应用程序传入参数提供可能。
二、URL传参应用
-
必须通过IE浏览器打开ClickOnce应用程序Web地址 *.application 并传入URL参数
例:http://192.168.0.79/download/publish/MyEntry.application?id=22
URL参数与Get请求参数写法一致
因为必须通过IE浏览器进行请求,如果在其他浏览器打开该地址,会被当作保存到本地的下载方法,URL参数会丢失。通过C#代码使用IE打开该地址,写法如下:
Process.Start("iexplore.exe",@"http://192.168.0.79/download/publish/MyEntry.application?id=22");
应用程序内解析该参数的方法:
using System.Collections.Generic; using System.Deployment.Application; using System.Text; using System.Web; namespace MyEntry.ClickOnce { public static class ClickOnceHelper { /// <summary> /// 获取简单URL参数 /// </summary> /// <returns></returns> public static string GetQueryString() { if (ApplicationDeployment.IsNetworkDeployed) { if (ApplicationDeployment.CurrentDeployment.ActivationUri != null) { return ApplicationDeployment.CurrentDeployment.ActivationUri.Query; } } return null; } /// <summary> /// 对URL进行解析并返回键值对字典 /// </summary> /// <returns></returns> public static Dictionary<string, string> GetQueryStringParameters() { var queryString=ClickOnceHelper.GetQueryString(); if (string.IsNullOrEmpty(queryString)) { return null; } var nameValueCollection = HttpUtility.ParseQueryString(queryString, Encoding.Default); var dictionary = new Dictionary<string, string>(); foreach (var key in nameValueCollection.AllKeys) { dictionary.Add(key, nameValueCollection.Get(key)); } return dictionary; } } }