WebEnh

.net7 mvc jquery bootstrap json 学习中 第一次学PHP,正在研究中。自学进行时... ... 我的博客 https://enhweb.github.io/ 不错的皮肤:darkgreentrip,iMetro_HD
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

发布ClickOnce应用程序步骤与URL传参应用

Posted on 2024-05-27 22:45  WebEnh  阅读(140)  评论(0编辑  收藏  举报

 

一、ClickOnce应用程序发布配置

  1. 签名-为ClickOnce清单签名 → 取消勾选

  2. 签名-为程序集签名 → 取消勾选
    在这里插入图片描述

  3. 安全性-启用ClickOnce安全设置 →勾选

  4. 安全性-这是完全可信的应用程序 →勾选
    在这里插入图片描述

  5. 发布-发布文件夹位置

  6. 发布-安装文件夹

  7. 发布-该应用程序可以脱机使用 →勾选

  8. 发布-随每次发布自动递增修订号 →勾选
    在这里插入图片描述

  9. 发布-应用程序文件 →检查依赖项是否被包含 在这里插入图片描述

  10. 发布-系统必备组件
    根据该应用程序的运行环境,选取系统必备组件,一般为系统默认勾选
    指定系统必备组件的安装位置,如果勾选第一项,在安装ClickOnce应用程序时,会从微软官网下载运行环境必备组件,如果不能访问外网,或网络不稳定,会导致下载失败。建议勾选第二项,即使是局域网软件也可以正常安装运行组件。

在这里插入图片描述
11. 发布-更新
应用程序应该检查更新 →勾选
应用程序启动前 →勾选。勾选此项,可以让ClickOnce应用程序在启动前自动检查更新,以保证每次运行都是最新的版本。
指定该应用程序要求的最低版本 →勾选。同时需设置版本号需与发布的版本号一致,每次都需要手动设置一下,可保证客户端应用程序可以在启动时自动下载更新并安装,否则会容易被用户手动跳过版本更新。
在这里插入图片描述
12. 发布-选项
部署-发布后打开部署网页 →取消勾选。如果勾选了,则会在发布结束自动打开“部署网页”里填写的自动生成的静态网页,应该网页界面比较丑陋,一般不使用该网页。
部署-使用“.deploy”文件扩展名 →取消勾选。如果勾选了,则可导致应用程序安装可能不成功,提示验证不通过或部署清单缺失之类。
在这里插入图片描述
13. 发布-选项
清单-允许用应用程序传递URL参数 →勾选。为从外部启动ClickOnce应用程序传入参数提供可能。
在这里插入图片描述

二、URL传参应用

  1. 必须通过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;
            }
    
        }
    }
    
  2.