使用ClickOnce发布Windows应用程序
前言
因本人工作需要,在一名非常非常好的老师的指导下,入门了C#,再次向老师表示感谢。
本人平时经常遇到的业务就是将数据下发给各部门,并让各部门再上报,此过程中经常会遇到数据格式不正确,数据错误等诸多问题。于是我就想到写一个数据上报系统,来规范他们的数据。但又因知识水平有限,暂时写不了MVC等网页程序,因此就做了个B/S版的WINFORM应用,但又不想每次更新后给他们每个人发客户端或者自己写代码架设服务器实现自动更新(因为本人较懒,使用了微软的ClickOnce,觉得很方便,所以就没学习自己写更新程序这部分内容,等以后了再学吧)。现创建一个简单的DEMO,希望大家可以一起交流学习。文中有部分概念性的东西是引用的。
ClickOnce简介
ClickOnce 部署使您可以将基于 Windows 的应用程序发布到 Web 服务器或网络文件共享以简化安装。Visual Studio 对通过 ClickOnce 部署的应用程序的发布和更新提供完全支持。ClickOnce 部署可用于使用 Visual Basic、Visual C# 和 Visual J# 创建的项目,但不能用于使用 Visual C++ 创建的项目。
使用ClickOnce的好处
使用ClickOnce发布Windows应用程序可以使用户方便地更新应用程序,可以起到B/S的效果,当程序更新了不必每一个用户重新安装更新。程序发布者只需要把新版本放到服务器,程序使用者在启动软件或退出软件时即可更新软件(更详细参看图解发布过程)。
当然,要使安装过程更可视化、在安装过程加入更多操作则应该自己制作安装程序。
图解发布过程
首先,配置好IIS,如下图所示:
接着,选择要发布的项目,右点击选择“属性”,然后选择“发布”选项页,如下图所示:
第一次使用ClickOnce这个功能,建议使用“发布向导”,“浏览”,选择刚才配置IIS时候的目录,如下图所示:
下一步:此处要注意,必须用管理员账户运行VS才能获取IIS的网址,否则会提示你用管理员帐户重新运行。管理员运行VS后,选择刚才配置的IIS网站,如下图所示:
接下来,根据你程序的需要,选择是否需要脱机运行,我选择的是不允许,这里的区别就是如果允许,他们从网站运行一次就会将程序集全部下载到本地,以后不用通过网站也能运行,这样可能会出现,你服务器上的已经更新到5.0了,而他们还依然使用着2.0的版本。所以我设置的是只能通过联机使用。如下图所示:
点击完成后,如果不出意外,最简单的布置就完成了,会直接跳转到配置好的IIS网页,如下图所示:
点击“运行”,会自动将程序下载并执行,如下图:
点击运行后会进入到程序,如下图所示:
接下来,我们试着更改一下程序的内容,再发布一次,看看效果,将“hello world”改为"hello my friends!",并将字体颜色更改为橙色,然后再进行到程序的发布界面,点击”立即发布“,版本编号会自动进行更新,由1.0.0.1变更成了1.0.0.2,前面的1.0.0.1指的是此次发布后程序的版本,后面的1.0.0.2指的是程序下一次发布后的版本号,如下图:
发布后,VS会自动进入新的网站,如下图所示:
可以看到,当前发布后的版本是1.0.0.1,点击运行程序后,效果如下图:
以上就实现了通过微软给我们提供的ClickOnce来实现自动更新的基本功能。接下来,我把使用过程中的问题也总结一下:
1.程序发布后,点击运行有可能会出现,没有运行按钮(我这里的图有”运行“按钮,此处win 7 和 win 10 界面不一致,大家遇到了根据情况可以试一下这个方法),错误提示界面如下图:
此时需要在注册表里面添加如下内容,即可解决此问题:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy\Extensions]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy\Extensions\NamedPermissionSets]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy\Extensions\NamedPermissionSets\Internet]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy\Extensions\NamedPermissionSets\Internet\MediaPermission]
"Xml"="<IPermission class=\"System.Security.Permissions.MediaPermission, WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" version=\"1\" Audio=\"SafeAudio\" Video=\"SafeVideo\" Image=\"SafeImage\"/>"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy\Extensions\NamedPermissionSets\Internet\WebBrowserPermission]
"Xml"="<IPermission class=\"System.Security.Permissions.WebBrowserPermission, WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" version=\"1\" Level=\"Safe\"/>"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy\Extensions\NamedPermissionSets\LocalIntranet]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy\Extensions\NamedPermissionSets\LocalIntranet\MediaPermission]
"Xml"="<IPermission class=\"System.Security.Permissions.MediaPermission, WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" version=\"1\" Audio=\"SafeAudio\" Video=\"SafeVideo\" Image=\"SafeImage\"/>"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\Policy\Extensions\NamedPermissionSets\LocalIntranet\WebBrowserPermission]
"Xml"="<IPermission class=\"System.Security.Permissions.WebBrowserPermission, WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" version=\"1\" Level=\"Safe\"/>"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\TrustManager]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\TrustManager\PromptingLevel]
"MyComputer"="Enabled"
"LocalIntranet"="Enabled"
"Internet"="Enabled"
"TrustedSites"="Enabled"
"UntrustedSites"="Disabled"
2.如果你的程序集中有插件或者引用文件的话,要在【应用程序文件中添加】,如下图:
在上面这个界面中将所需的文件发布状态改为”包括“,
在上面这个界面中将所需的文件复制到输出目录改为”始终复制“,这样就能保证你的DLL或者一些引用文件能随着你的程序发布出去,否则虽然能发布成功,但程序无法正常运行。
以上就是我目前使用过程中的一些心得, CliceOnce的功能远比我说的要强大的多,我只是用了一些基础的功能,有可能以上内容中有不少错误,还请大家多多批评指正,谢谢。
使用ClickOnce发布Windows应用程序的更多相关文章
- ClickOnce 发布WinForm应用程序(非签名方式)
ClickOnce IIS7发布WinForm应用程序,非签名方式(不勾选签名中的"为ClickOnce清单签名") 一.在D盘上建一个文件夹”MyAppPath”. 该 ...
- Winform程序部署方式总结一——ClickOnce发布
针对Winform程序,介绍两种常用打包方式:ClickOnce和Windows Installer 应用程序如下: 一.ClickOnce发布 1.找到需要发布的项目文件,右击,从弹出的快捷菜单中找 ...
- C# Winform程序如何使用ClickOnce发布并自动升级(图解)
有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布关于打包的大家可以看我的文章C# winform程序怎么打包成安装项目(图解)其实打包是打包,发 ...
- 以管理员身份启动ClickOnce部署的应用程序
ClickOnce方式部署应用简单方便,估计很多人都用过,但这种方式存在一定的“缺陷”,即以管理员方式启动应用的问题,虽然出于安全考虑可以理解,但给需要管理员权限才能正常运行的程序带来了一定的麻烦,这 ...
- Visual Studio 2017 - Windows应用程序打包成exe文件(1)- 工具简单总结
最近有对一个Windows应用程序少许维护和修改.修改之后要发布新的exe安装文件,打包exe文件时,遇到了很头疼的问题,还好最后解决了,记录一下. Visual Studio版本:Visual St ...
- clickonce发布winform必备组件
ClickOnce 发布,在系统必备中勾选了 .NET Framework 4,并选择了"从与我的应用程序相同的位置下载系统必备组件"时,执行发布,会提示缺少很多文件 使用 Pac ...
- 微软发布 Windows Server 2016 预览版第三版,开发者要重点关注Nano Server
微软已经发布 Windows Server 2016 和 System Center 2016 第三个技术预览版,已经提供下载.Windows Server 2016 技术预览版第三版也是首个包括了容 ...
- SharePoint 2013 开发——发布SharePoint应用程序
博客地址:http://blog.csdn.net/FoxDave 前几篇我们介绍了开发.部署和调试SharePoint应用程序的基础,本篇介绍更实用的操作,当我们开发一个SharePoint应用 ...
- 转:vs发布window应用程序时出错:未能签名 ...\setup.exe
在vs发布window应用程序过程中,提示“SignTool 报告了一个错误‘未能签名 ...\setup.exe.SignTool 错误: ISignCode::Sign 返回的错误: 0x80 ...
随机推荐
- Java并发:线程限制
最近又学到了很多新知识,感谢优锐课老师细致地讲解,这篇博客记录下自己所学所想,也和大家分享.了解有关Java中的并发问题和线程限制的更多信息. 在此文中,我们将探讨线程限制,它的含义以及如何实现.因此 ...
- Python3 文件处理
目录 文件操作的流程 文件的三种打开模式 读取: rt read_text 针对文本内容只读 清空写入: wt write_text 针对文本内容只写 追加写入: at append_text 针对文 ...
- 【重温基础】JS中的常用高阶函数介绍
Ps. 晚上加班到快十点,回来赶紧整理整理这篇文章,今天老大给我推荐了一篇文章,我从写技术博客中收获到了什么?- J_Knight_,感受也是很多,自己也需要慢慢养成记录博客的习惯,即使起步艰难,难以 ...
- 海思HI3518EV200+AR0130开发板DIY——前篇
海思HI3518EV200+AR0130开发板DIY 今天开始要围绕这个项目学习了(还是得从C开始学 ) 缘起(这段主要水废话)相关开发资料 →_→ 原理图设计 原理图整体框架 一.电源部分 HI35 ...
- LNMP-Nginx配置SSL
SLL工作流程: 浏览器发送一个https的请求给服务器: 服务器要有一套数字证书,可以自己制作(后面的操作就是阿铭自己制作的证书),也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以 ...
- AJAX 多次调用,后面的会覆盖前面的内容/数据
1.有的时候,同一个请求链接,需要传递不同的参数,发起多个请求.因此我采用了for循环. 1.1 此处是需要传递的参数 function behavioranalysisReqstue(type) { ...
- 1篇文章搞清楚8种JVM内存溢出(OOM)的原因和解决方法
前言 撸Java的同学,多多少少会碰到内存溢出(OOM)的场景,但造成OOM的原因却是多种多样. 堆溢出 这种场景最为常见,报错信息: java.lang.OutOfMemoryError: Java ...
- Applet和普通的Java应用程序有什么区别?
(1)运行方式不同.Java Applet程序不能单独运行,它必须依附于一个用HTML语言编写的网页并嵌入其中,通过与Java兼容的浏览器来控制执行.Java Application是完整的程序,可以 ...
- Java String indexOf()方法
public class Test { public static void main(String[] args) { String s = "xXccxxxXX"; // 从头 ...
- 《Dotnet9》系列-FluentValidation在C# WPF中的应用
时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...