前言

因本人工作需要,在一名非常非常好的老师的指导下,入门了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应用程序的更多相关文章

  1. ClickOnce 发布WinForm应用程序(非签名方式)

    ClickOnce IIS7发布WinForm应用程序,非签名方式(不勾选签名中的"为ClickOnce清单签名") 一.在D盘上建一个文件夹”MyAppPath”.      该 ...

  2. Winform程序部署方式总结一——ClickOnce发布

    针对Winform程序,介绍两种常用打包方式:ClickOnce和Windows Installer 应用程序如下: 一.ClickOnce发布 1.找到需要发布的项目文件,右击,从弹出的快捷菜单中找 ...

  3. C# Winform程序如何使用ClickOnce发布并自动升级(图解)

    有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布关于打包的大家可以看我的文章C# winform程序怎么打包成安装项目(图解)其实打包是打包,发 ...

  4. 以管理员身份启动ClickOnce部署的应用程序

    ClickOnce方式部署应用简单方便,估计很多人都用过,但这种方式存在一定的“缺陷”,即以管理员方式启动应用的问题,虽然出于安全考虑可以理解,但给需要管理员权限才能正常运行的程序带来了一定的麻烦,这 ...

  5. Visual Studio 2017 - Windows应用程序打包成exe文件(1)- 工具简单总结

    最近有对一个Windows应用程序少许维护和修改.修改之后要发布新的exe安装文件,打包exe文件时,遇到了很头疼的问题,还好最后解决了,记录一下. Visual Studio版本:Visual St ...

  6. clickonce发布winform必备组件

    ClickOnce 发布,在系统必备中勾选了 .NET Framework 4,并选择了"从与我的应用程序相同的位置下载系统必备组件"时,执行发布,会提示缺少很多文件 使用 Pac ...

  7. 微软发布 Windows Server 2016 预览版第三版,开发者要重点关注Nano Server

    微软已经发布 Windows Server 2016 和 System Center 2016 第三个技术预览版,已经提供下载.Windows Server 2016 技术预览版第三版也是首个包括了容 ...

  8. SharePoint 2013 开发——发布SharePoint应用程序

    博客地址:http://blog.csdn.net/FoxDave 前几篇我们介绍了开发.部署和调试SharePoint应用程序的基础,本篇介绍更实用的操作,当我们开发一个SharePoint应用 ...

  9. 转:vs发布window应用程序时出错:未能签名 ...\setup.exe

      在vs发布window应用程序过程中,提示“SignTool 报告了一个错误‘未能签名 ...\setup.exe.SignTool 错误: ISignCode::Sign 返回的错误: 0x80 ...

随机推荐

  1. JS基础-事件

    事件机制 事件触发三阶段 事件触发有三个阶段: window 往事件触发处传播,遇到注册的捕获事件会触发 传播到事件触发处时触发注册的事件 从事件触发处往 window 传播,遇到注册的冒泡事件会触发 ...

  2. 【docker】使用学习

    [docker]使用学习 目录 =========================================================== 1.docker 安装 2.mysql 安装 3 ...

  3. 【consul】使用学习

    [consul]使用学习 转载:https://www.cnblogs.com/yangchongxing/p/10653791.html 1.下载 consul https://www.consul ...

  4. 面试题:4个zookeeper的应用场景,你知道几个?

    前言 现在聊的 topic 是分布式系统,面试官跟你聊完了 dubbo 相关的一些问题之后,已经确认你对分布式服务框架/RPC框架基本都有一些认知了.那么他可能开始要跟你聊分布式相关的其它问题了. 分 ...

  5. tomcat启动内存溢出三种解决方案:java.lang.OutOfMemoryError:PermGen space解决办法

    问题: 严重: Error waiting for multi-thread deployment of WAR files to completejava.util.concurrent.Execu ...

  6. 【高可用架构】开发机上部署Deploy项目(一)

    准备 部署项目的细节可以看这个,传送门Centos 7部署Laravel项目 主机IP:192.168.10.17 [高可用架构]系列链接:待部署的架构介绍 演示 部署Deploy composer ...

  7. Cesium案例解析(一)——HelloWorld

    目录 1. 概述 2. 实例 2.1. HelloWorld.html 2.2. HelloWorld.js 3. 结果 1. 概述 感觉网上已经有不少关于cesium的教程了,但是学习一个框架最快的 ...

  8. 错题本:ConstraintLayout 不能正常显示

    理想效果: 实际效果: 原因:因为文件中一个控件的约束属性写错了 这个属性是 app:layout_constraintLeft_toLeftOf="@id/oa_setting_group ...

  9. eth-trunk学习笔记

    转载自https://blog.csdn.net/qq_38265137/article/details/80404340

  10. SpringBoot系列——Jackson序列化

    前言 Spring Boot提供了与三个JSON映射库的集成: Gson Jackson JSON-B Jackson是首选的默认库. 官网介绍: https://docs.spring.io/spr ...