WPF ClickOnce应用程序IIS部署发布攻略

WPF程序非常适合公司内网使用,唯一缺点就是客户端要安装.net框架4.0。优势也很明显,在客户端运行的是一个WinForm程序,自动下载,可以充分利用客户机的性能,而且是以当前的Windows用户权限运行,避免了权限带来的问题。而我觉得最大的益处还是可以自动更新!这样就具备了CS程序功能强大速度快的优点,又有BS程序部署升级容易的优点。

本文要讨论的就是,WPF ClickOnce应用程序的发布,IIS设置,客户端使用的一系列过程。

一、先建立一个IIS网站承载WPF应用程序。

1、新建一个目录,命名IISWpf。

2、打开IIS管理器,添加网站。

确定,网站就建好了。打开物理路径F:\IISWpf,新建一个目录WPFApp_01,以后每增加一个应用程序就建一个目录。

二、现在开始Visual Studio的工作

新建项目,选择WPF应用程序。注意:不是WPF浏览器应用程序。

重点是项目属性的设置。

安全性,启用ClickOnce安全设置

编译好,下一步就可以发布了。

 

选择iis_wpf_host下的WPFApp_01。点"打开",系统会有一个对话框询问这是一个应用程序,是否打开?当然选是。

立即发布!

这时在物理路径下多了一些东西,这就是发布的内容。

到现在运行这个程序的地址已经有了:http://本机IP:7000/WPFApp_01/

 例如:http://localhost:7000/

三、回到IIS管理器设置默认文档

在设置默认文档前,右键WPFApp_01,转换成应用/convert to application. 文件夹图标会转换成地球图标。

增加默认文档:XXERP.application。

4. 发布ClickOnce包

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

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

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

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

5. 问题补遗

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

看看完成的结果,打开IE,输入网址http://本机IP:7000/WPFApp_01/

我的备注:IE,EDGE都能打开。本地测试Chorme无法下载打开。

以上转载自:REF1:http://www.cnblogs.com/edong/archive/2013/06/06/3121623.html

ref2:http://gcsjl8.com/forum.php?mod=viewthread&tid=102

其他:没有安装IIS 服务的,百度如何安装IIS服务。

本机测试碰到一些报错,无法显示网页,因为没有权限读取目录:可以在Directory Browsing中点击Enable,打开后,会显示如下图。

转载于:https://www.cnblogs.com/watermarks/p/8463453.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件传输协议

文件传输协议(英文:File Transfer Protocol,简称为FTP)是用于在网络上进行文件传输的一套标准协议。它属于网络传输协议的应用层。 FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理&#xff…

36.LEN() 函数

LEN() 函数 LEN 函数返回文本字段中值的长度。 SQL LEN() 语法 SELECT LEN(column_name) FROM table_name SQL LEN() 实例 我们拥有下面这个 "Persons" 表: IdLastNameFirstNameAddressCity1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew York…

【python学习】——为exe软件创建快捷方式;实现软件自启动

目录 1、为exe创建快捷方式 2、实现软件自启动 3、完整代码 4、结果展示 1、为exe创建快捷方式 利用winshell库的CreateShortCut函数进行创建 【python学习】——获取桌面路径,获取系统盘符,获取电脑用户名,获取软件自启动存放目录_有情怀…

dedecms如何调用当前栏目的子栏目及子栏目文章

前面ytkah谈到了 dedecms调用当前栏目的子栏目怎么操作,有的朋友会问如果再增加一个调用子栏目文章的需求,即调用当前栏目的子栏目及子栏目文章,这个有办法实现吗?这时就要涉及到另外两个标签的调用了,dede:channelart…

控制面板项 .cpl 文件说明

控制面板项 .cpl 文件说明appwiz.cpl 程序和功能、卸载或更改程序bthprops.cpl 蓝牙控制面板desk.cpl 屏幕分辨率Firewall.cpl WINDOWS防火墙hdwwiz.cpl 设备管理器igfxcpl.cpl 英特尔图形和…

vxWorks下常用的几种延时方法

在应用编程的时候,通常会碰到需要一个任务在特定的延时之后执行一个指定的动作,如等待外设以确保数据可靠,控制扬声器发声时间以及串口通信超时重发等。这就需要利用定时器机制来计量特定长度的时间段。 vxWorks作为实时嵌入式系统&#xff0…

【pyqt5学习】——窗口最小化至托盘、取消任务栏图标

目录 1、最小化至托盘 1)重写系统托盘类,设置托盘图标等属性 2)将具体的窗口放入托盘 2、取消任务栏界面图标 3、问题汇总 1)退出后托盘图标还是存在,没有消失 2)最小化后左下角会出现 窗口 3&#…

标准库类型String,Vector

string对象中每个字符的处理&#xff1a; 要用到 for(声明:表达式) 语句 比如简单的打印string str中每一个字符 --- string str("hello world!!!"); for(auto c: str)cout<<c<<endl; (ps:这里auto 的意思是让编译器自己来决定c变量的类型) --- 再举一…

React 是怎样炼成的

本文主要讲述 React 的诞生过程和优化思路。 内容整理自 2014 年的 OSCON - React Architecture by vjeux&#xff0c;虽然从今天&#xff08;2018&#xff09;来看可能会有点历史感&#xff0c;但仍然值得学习了解。以史为鉴&#xff0c;从中也可以管窥 Facebook 优秀的工程管…

HOJ 1640 Mobile Phone

题意&#xff1a;有一个n*n的矩阵&#xff0c;op1时&#xff0c;在(x,y)增加值z&#xff0c;op2时&#xff0c;求以(x1,y1)和(x2,y2)构成的矩阵的和。 思路&#xff1a;二维线段树。 代码&#xff1a; 1 #include<stdio.h>2 #include<string.h>3 const int N1111;4…

vxWorks多任务编程初探-上

进程&#xff08;Process&#xff09;是具有一定独立功能的程序关于某个数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的一个独立单位。程序只是一组指令的有序集合&#xff0c;它本身没有任何运行的含义&#xff0c;只是一个静态实体。而进程则不同&#xff…

【pyqt5学习】——重写窗口右上角关闭事件closeEvent()

目录 1、法一&#xff1a;设置中文按钮 2、法二&#xff1a;不设置中文按钮 pyqt5 关闭按钮显示提示信息_Marvin_Xavier的博客-CSDN博客_pyqt 关闭按钮https://blog.csdn.net/marwenx/article/details/107226531 1、法一&#xff1a;设置中文按钮 def closeEvent(self, even…

感动要哭 撸了一个半小时的重载预算符高精

撸了一个半小时代码&#xff0c;没玩守望&#xff08;垃圾游戏毁我青春五个金牌都带不起队友&#xff09;最后编译出312个错误。吓我&#xff0c;然而改了几个地方就直接过了直接过了直接过了&#xff0c;目前还是不明白ostream&#xff0c;istream的用处&#xff0c;上网才搞定…

LVDS DP等显示器接口简介

LVDS 产品传输速率从几百Mbps到2Gbps。它是电流驱动的&#xff0c;他通过在接收端放置一个负载而得到的电压&#xff0c;当电流正向流动&#xff0c;接收端输出为1&#xff0c;反之为0&#xff0c;它的摆幅250mV-450mV. lvds 即低压差分信号传输&#xff0c;是一种满足高性能传…

http协议相关内容

二、HTTP协议1、协议&#xff1a;共同遵守的规则。2、网络协议有&#xff1a;TCP&#xff08;有三次握手机制&#xff09;/IP&#xff1a;传输控制协议/地址协议&#xff0c;SMTP&#xff1a;简单邮件传输协议&#xff0c;FTP&#xff1a;文件传输协议&#xff0c;http&#xf…

使用XmlTextReader 读取XML

XmlTextReader 限于只向前的读取 XmlTextReader 的技术类似于读取其他任何文件 首先打开文件&#xff0c;然后从文件中读取信息,最后关闭文件. 每次从文件中读取信息时&#xff0c;他在文件中的位置都会前移.到达文件结尾的时候就什么都不读了。 1 创建XmlTextReader对象 …

C#中ComboBox动态绑定赋值

http://www.crifan.com/csharp_combobox_data_dynamic_binding/ C#中&#xff0c;已有一个List&#xff0c;想要动态的&#xff0c;绑定到ComboBox中。 【解决过程】 1.参考&#xff1a; c# winform comboBox动态绑定数据 去试试代码&#xff1a; cmbSubCategory.DataSource g…

【pyqt5学习】——日历控件calendarWidget设置单元格格式(前景、背景)、日历控件属性编辑

目录 0、导入库 1、返回日历选中的日期 2、更改日历控件周几&#xff08;比如一个月属于周一的日期&#xff09;的所有格子属性 3、更改日历控件单个格子&#xff08;指定日期&#xff09;属性 4、日历格子属性 5、信号——clicked() 6、成果展示 0、导入库 from PyQt5.Q…

linux内核数据结构之链表

1、前言 最近写代码需用到链表结构&#xff0c;正好公共库有关于链表的。第一眼看时&#xff0c;觉得有点新鲜&#xff0c;和我之前见到的链表结构不一样&#xff0c;只有前驱和后继指针&#xff0c;而没有数据域。后来看代码注释发现该代码来自linux内核&#xff0c;在linux源…

为什么使用 XML

为什么使用 XML&#xff1f; Web 使我们能够与任何地方的任何人通讯。广泛接受的标准&#xff08;这对完全使用 Web 的潜力是至关重要的&#xff09;允许 Web 在多种交互操作的技术层上通讯。一个重要层是可视化显示和用户界面&#xff0c;例如 HTML、GIF 和 JScript(TM) 之类的…