前言

因本人工作需要,在一名非常非常好的老师的指导下,入门了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. 新版FPC摄像头测评 OV7725 OV7670 OV9650 OV9655 OV5640 OV5642 OV2640 OV3640 MT9D112

    新版FPC摄像头测评 OV7725 OV7670 OV9650 OV9655 OV5640 OV5642 OV2640 OV3640 MT9D112 最新制样新版FPC摄像头板卡,先看看结构尺寸 再瞧 ...

  2. java之单例设计模式

    什么是设计模式? 设计模式是在大量的实践中总结和理论化之后优选的代码结构.编程风格.以及解决问题的思考方式.设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和探索. 所谓单例 ...

  3. Day 06 流程控制和爬虫基础2

    目录 if 判断 单分支结构 双分支结构 多分支结构 for循环 for循环的基本用法 for循环嵌套 break continue 爬虫基础2 爬取豆瓣TOP250 爬取豆瓣数据接口(异步数据) 爬 ...

  4. 【系列专题】JavaScript 重温系列(22篇全)

    JavaScript 初级篇 [JS]120-重温基础:语法和数据类型 [JS]121-重温基础:流程控制和错误处理 [JS]122-重温基础:循环和迭代 [JS]123-重温基础:函数 [JS]12 ...

  5. 【Eureka】集群搭建

    [Eureka]集群搭建 转载============================================== ====================================== ...

  6. web开发中浏览器跨域问题

    <system.webServer> <httpProtocol> <customHeaders> <add name="Access-Contro ...

  7. windows10查看电脑已经保存的wifi密码

    1,打开windows的命令窗口,输入    netsh wlan show profiles,如下图,这个命令仅仅只是查看一下电脑保存的所有的wifi名字 2,需要查看密码的话,则需要输入这个命令, ...

  8. re常用模块

    re模块:从字符串里面找到特定的字符串 re的基本语法(匹配规则) import re s = '王大炮打炮被大炮打死了 王大炮打炮被大炮打死了' ^:开头 print(re.findall('^王大 ...

  9. 安装react-native-cli工具(三)

    设置淘宝镜像 (这一步可以省略) npm config set registry https://registry.npm.taobao.org --global npm config set dis ...

  10. CreateDefaultBuilder方法都做了什么?

    当我们创建好一个新的ASP.NET Core Web应用时,系统会使用CreateDefaultBuilder方法,这个方法完成了以下操作: use Kestrel as the web server ...