精华内容
下载资源
问答
  • ClickOnce 发布WinForm应用程序(签名方式)
    千次阅读
    2017-10-22 18:06:02

    ClickOnce 发布WinForm应用程序(签名方式)
    ClickOnce部署的应用程序进行数字签名的作用:
    为了保证系统的安全,现在Windows(比如Windows 8)对于通过网络上下载的应用程序的执行文件都会首先阻止,并提示用户是否要运行。这个时候,同时会提示这个应用程序的发行者。如果一个没有进行数字签名的应用程序,这个时候发行者就为“未知”,签名后,就可以告知用户这个应用程序是由你提供的。在这里,数字签名就是保证这个应用程序是由你发行,并未被第三方更改的。
    上面这种情况还好,很多时候,如果你安装了360之类的软件,对于未签名的应用程序,大部分情况是阻止其运行的。如果没有进行数字签名,那么对用户会造成极大困扰。
    简而言之:
      数字证书,可以保证软件不被修改,可以表明文件的发布日期,最重要的,可以很大程度的减少杀毒软件的误报,当然,这就要使用可信任的机构颁发的证书了
    发布:
    1、主要步骤同: ClickOnce 发布WinForm应用程序(非签名方式)
    2、不同(为ClickOnce清单签名):
       VS项目属性->签名->勾选:为ClickOnce清单签名->创建测试证书->从文件选择,刚创建的证书
       发布会报错:
    发布时提示未找到signtool.exe
    原因:
    是C盘SDK目录里signtool.exe文件缺失导致的,检查
        C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 是不是没有signtool.exe
        解决方法
      1.去VS目录
        D:\Program Files\Microsoft Visual Studio 14.0\Common7\Tools或者
        D:\Program Files\Microsoft Visual Studio 14.0\SDK\v3.5\Bin
       找signtool.exe来复制到C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin下
        再编译就能通过而且正常发布了
    2.如果无signtool.exe,则点击下载
       http://download.csdn.net/download/tangtiantian520/10034702
    关于创建证书:
       上述证书只是创建一个测试证书,真正创建一个证书步骤参见:http://blog.csdn.net/itjobtxq/article/details/9986795
       证书制作好以后,发布时选择该证书。
       用户在安装你的ClickOnce包之前先把证书安装到他的计算中的可信任区域中,然后再去安装你的应用,就不会有安全提示了。以后你发布的应用都用这个证书就行了,不过,注意证书不要过期了,过期了就重新生成一个日期较新的

    数字签名流程原理:http://www.cnblogs.com/itech/archive/2011/07/21/2110924.html
    参见:
    http://www.cnblogs.com/redmoon/p/3166064.html 为通过ClickOnce部署的应用程序进行数字签名
    http://blog.csdn.net/sgear/article/details/6458581 在决定使用ClickOnce发布你的软件前,应该知道的一些事情(一些常见问题解决方法)

    更多相关内容
  • win10神奇的,勾选了组件但是没有安装这些组件,不影响vsto功能的使用

    win10神奇的,勾选了组件但是没有安装这些组件,不影响vsto功能的使用

    展开全文
  • 用户发出的请求,都会被DispatcherServlet请求拦截 我们上述在浏览器请求的url为http://localhost:8080/hello,该url会被拆成三部分: http://localhost:8080表示服务器域名 部署在服务器上的web站点,这里没有设置...

    一、第一个SpringMVC程序

    项目结构:

    1. 新建一个普通的maven项目,添加web支持

    fe76352161563470db137fe5d9c281ec.png
    79596bdfc1f62491483e7998c121ed88.png

    2. pom.xml中添加所需依赖

    servlet

    javax.servlet    servlet-api    2.512345

    jsp

    javax.servlet.jsp    jsp-api    2.2 12345

    SpringMVC相关

    org.springframework    spring-webmvc    5.2.8.RELEASE12345

    3. 编写SpringMVC配置文件

    在resource目录下新建springmvc-servlet.xml

    和Spring的配置文件一样

    <?xml version="1.0" encoding="UTF-8"?>1234567

    添加处理映射器HandlerMapping

    1

    添加处理器适配器HandlerAdapter

    1

    添加视图解析器ViewResolver

    • 需要添加所需的前缀和后缀,后续会自动拼接名字
    123456789101112

    4. 在web.xml中配置注册DispatcherServlet

    注意

    • DispatcherServlet 需要绑定SpringMVC配置文件,绑定上述创建好的配置文件
    • DispatcherServlet 需要设置启动级别,系统刚启动的时候有些内置的请求可能被处理,这里设置为1,同服务器一同启动
    • 在SpringMVC中,url-pattern常用设置匹配的请求的路径有两种/: 匹配所有的请求(不包括.jsp),一般用/,因为后续会通过视图解析器增加后缀/*: 匹配所有的请求(包括.jsp)
    <?xml version="1.0" encoding="UTF-8"?>springmvcorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:springmvc-servlet.xml1springmvc/123456789101112131415161718192021222324252627

    5. 编写业务类

    在src/main/java目录下新建controller包,在其中新建HelloController.java

    业务实现有两种方式

    1. 实现Controller接口
    2. 增加注解
    package controller;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.Controller;public class HelloController implements Controller {    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws Exception {        //ModelAndView 模型和视图        ModelAndView mv = new ModelAndView();    //业务代码        //封装对象,放在ModelAndView中。Model        mv.addObject("msg","HelloSpringMVC!");                //封装要跳转的视图,放在ModelAndView中        mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp        return mv;    }}12345678910111213141516171819

    这里实现Controller接口,实现其抽象方法handleRequest,其中分为几个步骤:

    1. 方法需要返回一个ModelAndView,首先创建一个ModelAndView
    2. 向创建好的ModelAndView中存入数据
    3. 封装要跳转的视图,存入ModelAndView中,这里跳转的视图名称为hello,该名称会经过上述的视图解析器ViewResolver增加前缀后缀成完整路径/WEB-INF/jsp/hello.jsp
    4. 最后返回ModelAndView

    6. 在SpringMVC配置文件中注册上述实现类

    注意:这里的id为我们要请求的位置,这里请求/hello

    处理器映射器会在这个bean里寻找到url的名字(这里就是id)进行处理

    12

    7. 编写要请求的jsp页面

    在web/WEB-INF下新建jsp包,在其中新建跳转页面hello.jsp

    这里显示我们前面在ModelandView存放的数据,以及我们的正常页面;

        Title    ${msg}123456789

    8. 配置Tomcat 启动测试!

    我们访问http://localhost:8080/hello

    8447864aff94b51fd5ad399cc03ce732.png

    9. 404报错?解决方案

    解决办法

    打开Project Structure查看项目结构

    1feb163376b364d2f5251983474a01fa.png


    发现没有lib目录,这时候需要手动添加lib依赖

    9801a27de6cd34b4c372406f5f8151ba.png


    然后,点击+添加依赖,选中所有依赖

    87a80ea3918e6a360c86704484e96aa1.png
    967c75af8e078b2b7ad83bf686c3314f.png

    应用,然后重启Tomcat,再次访问http://localhost:8080/hello

    a03e2873d7ec8d78908f33a800470555.png

    二、执行流程分析

    f8c82e67f25b36d62c63b95dafe49011.png

    图中实线表示SpringMVC框架已经实现的技术,虚线表示需要我们实现


    1. DispatcherServlet

    前置控制器,是整个SpringMVC的核心

    用户发出的请求,都会被DispatcherServlet请求拦截

    12e16e590fff64629b5664b8f1eea459.png

    我们上述在浏览器请求的url为http://localhost:8080/hello,该url会被拆成三部分:

    1. http://localhost:8080表示服务器域名
    2. 部署在服务器上的web站点,这里没有设置可以在Tomcat中进行配置,如设置为/SpringMVC则web站点为SpringMVC
    3. hello表示控制器

    2. HandlerMapping

    处理器映射

    • HandlerMapping根据请求的url查找处理器Handler

    HandlerMapping会被DispatcherServlet会自行调用,然后查找Handler

    0cb28fc16fa59da9eac9c174e602866a.png


    上述我们请求的url被拆解为三部分,然后HandlerMapping通过第三部分hello进行匹配,找到对应的处理器Handler

    3e0be30c2dc8ee8e8eeb952a14cc8fd0.png

    3. HandlerExecution

    具体的处理器Handler

    • 主要作用是根据url查找控制器

    上述通过HandlerMapping匹配到了对应的处理器Handler,然后通过HandlerExecution通过url查找到控制器为hello,然后其将解析后的信息传递给DispatcherServlet,如解析控制器映射等

    f7c6fe0b56cc8b3f3c5094b688651b3b.png

    4. HandlerAdapter

    处理器适配器

    1. 上述找到了处理器Handler,并返回给了DispatcherServlet
    2. 然后就需要交给HandlerAdapter进行适配并返回HandlerAdapter按照特定的规则(就是实现了Controller接口的类Controller)去执行Handler

    5. Controller

    控制器,是具体的类

    • 上述就是实现了Controller接口的类HelloController

    接下来的过程分为以下几步

    1. Handler让具体的Controller(HelloController)去执行
    2. Controller将具体的执行信息ModelAndView返回给HandlerAdapter
    3. ``HandlerAdapter将ModelAndView传递给DispatcherServlet`

    5. ViewResolver

    视图解析器

    上一步DispatcherServlet获取到了ModelAndView后,就需要通过ViewResolver进行解析

    af22505bcb0ff1069e48962cf05900a4.png
    1. DispatcherServlet调用视图解析器来解析HandlerAdapter传递的逻辑视图名
    2. 然后ViewResolver将逻辑视图名传给DispatcherServlet

    6. View

    视图

    8d677c329875eb45c0fa033cf5b5afb8.png
    1. DispatcherServlet根据视图解析器的视图结果,调用具体的视图
    2. 最终视图View呈现给用户

    来源:https://blog.csdn.net/qq_45173404/article/details/108181787?utm_medium=distribute.pc_category.none-task-blog-hot-3.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-3.nonecase&request_id=

    展开全文
  • ClickOnce 是 Visual Studio 2005 中包含的全新的 Windows 窗体部署技术。该技术使用智能客户端简化 Web 应用程序的安装和升级。自 .NET Framework 的第一个版本以来,Windows 窗体应用程序部署就一直可以通过 HTTP ...

    ClickOnce 是 Visual Studio 2005 中包含的全新的 Windows 窗体部署技术。该技术使用智能客户端简化 Web 应用程序的安装和升级。自 .NET Framework 的第一个版本以来,Windows 窗体应用程序部署就一直可以通过 HTTP 进行,并且自那时起就一直处于发展之中。ClickOnce 是一种部署技术,使用该技术可创建自行更新的基于 Windows 的应用程序,这些应用程序可以通过最低程度的用户交互来安装和运行。ClickOnce 部署克服了部署中所固有的三个主要问题:

    • 更新应用程序的困难。 使用 Microsoft Windows Installer 部署,每次应用程序更新,用户都必须重新安装整个应用程序;使用 ClickOnce 部署,则可以自动提供更新。只有更改过的应用程序部分才会被下载,然后从新的并行文件夹重新安装完整的、更新后的应用程序。

    • 对用户的计算机的影响。 使用 Windows Installer 部署时,应用程序通常依赖于共享组件,这便有可能发生版本冲突;而使用 ClickOnce 部署时,每个应用程序都是独立的,不会干扰其他应用程序。

    • 安全权限。 Windows Installer 部署要求管理员权限并且只允许受限制的用户安装;而 ClickOnce 部署允许非管理用户安装应用程序并仅授予应用程序所需要的那些代码访问安全权限。

    过去,这些问题有时会使开发人员决定创建 Web 应用程序而不是基于 Windows 的应用程序,为便于安装而牺牲了 Windows 窗体丰富的用户界面和响应性。对于使用 ClickOnce 部署的应用程序,您可以集这两种技术的优势于一身。

    什么是 ClickOnce 应用程序?

    简单说来,ClickOnce 应用程序就是任何使用 ClickOnce 技术发布的 Windows 窗体或控制台应用程序。可以采用三种不同的方法发布 ClickOnce 应用程序:从网页发布、从网络文件共享发布或是从媒体(如 CD-ROM)发布。ClickOnce 应用程序既可以安装在最终用户的计算机上并在本地运行(即使当计算机脱机时也可以运行),也可以仅以联机模式运行,而不在最终用户的计算机上永久安装任何内容。

    ClickOnce 和 Windows Installer 比较表

    下表将 ClickOnce 部署的功能与 Windows Installer 部署的功能进行了比较:

    功能 ClickOnce Windows Installer

    自动更新1

    安装后回滚2

    从 Web 更新

    不影响共享组件或其他应用程序

    授予的安全权限

    仅授予应用程序所必需的权限(更安全)

    默认授予“完全信任”权限(不够安全)

    要求的安全权限

    Internet 或 Intranet 区域(为 CD-ROM 安装提供完全信任)

    管理员

    应用程序和部署清单签名

    安装时用户界面

    单次提示

    多部分向导

    即需安装程序集

    安装共享文件

    安装驱动程序

    是(自定义操作)

    安装到全局程序集缓存

    为多个用户安装

    向“开始”菜单添加应用程序

    向“启动”组添加应用程序

    向“收藏夹”菜单添加应用程序

    注册文件类型

    安装时注册表访问3

    受限

    二进制文件修补

    应用程序安装位置

    ClickOnce 应用程序缓存

    “Program Files”文件夹

    说明

    1. 对于 Windows Installer,必须在应用程序代码中实现编程方式的更新。

    2. 对于 ClickOnce,可在“添加/删除程序”中实现回滚。

    3. ClickOnce 部署只有使用“完全信任”权限才能访问 HKEY_LOCAL_MACHINE (HKLM)。 

    ClickOnce 可以提供自动应用程序更新。ClickOnce 应用程序会定期读取其部署清单文件,以查看是否有可用的应用程序更新。如果有,则会下载并运行应用程序的新版本。为提高效率,仅下载那些已更改的文件。

    设计 ClickOnce 应用程序时,需要确定应用程序将使用何种策略来检查可用的更新。有三种基本策略可以使用:在应用程序启动时检查更新、在应用程序启动后检查更新(在后台线程中运行)或是提供进行更新的用户界面。此外,还可以确定应用程序检查更新的时间间隔,并且可以强制必须执行更新。

    在应用程序启动后检查更新

    如果使用该默认策略,则应用程序会在运行期间尝试在后台查找并读取部署清单文件。如果某个更新可用,则当用户下一次运行应用程序时,会提示用户下载并安装该更新。

    此策略最适用于低带宽的网络连接或可能需要长时间下载的较大应用程序。

    若要启用此更新策略,请在“应用程序更新”对话框的“选择应用程序何时应该检查更新”部分中单击“在应用程序启动后”。

    在应用程序启动时检查更新

    如果使用此策略,则每当用户启动应用程序时,应用程序都会尝试查找并读取部署清单文件。如果某个更新可用,则会下载并启动该更新;否则,会启动现有版本的应用程序。

    此策略最适用于高带宽的网络连接;在低带宽连接上启动应用程序时的长时间延迟可能令人无法接受。

    若要启用此更新策略,请在“应用程序更新”对话框的“选择应用程序何时应该检查更新”部分中单击“在应用程序启动前”。

    强制执行更新

    在有些情况下,您可能需要要求用户运行更新版本的应用程序。例如,您可能对诸如 Web 服务等外部资源进行了某种更改,而这种更改会使得较早版本的应用程序不能正常工作。在这种情况下,您需要将更新标记为“必需”,并阻止用户运行较早的版本。

    指定更新时间间隔

    还可以指定应用程序检查更新的频率。例如,您可能希望在应用程序每次运行时都检查更新,或是一周检查一次或一个月检查一次。如果在指定时间不存在网络连接,则更新检查会在应用程序下一次运行时执行。

    若要指定更新时间间隔,请在“应用程序更新”对话框中设置“指定应用程序检查更新的频率”属性。

    提供进行更新的用户界面

    如果使用此策略,应用程序开发人员会提供一个用户界面,用户可通过该用户界面选择应用程序检查更新的时间和频率。例如,可以提供一个“Check for Updates Now”(立即检查更新)菜单项,或是一个提供有不同更新时间间隔选项的“Update Settings”(更新设置)对话框。ClickOnce 部署 API 提供一个框架,用于对您自己的更新用户界面进行编程。有关更多信息,请参见 System.Deployment.Application 命名空间。

    如果应用程序使用部署 API 控制它自己的更新逻辑,则应按下面在“阻止更新检查”中介绍的那样阻止更新检查。

    此策略最适用于您需要为不同用户提供不同更新策略的情况。

    阻止更新检查

    还可以阻止应用程序检查更新。例如,您有一个永不更新的简单应用程序,但您希望利用 ClickOnce 部署提供的安装便利。

    如果应用程序使用部署 API 执行它自己的更新,也应阻止更新检查;请参见上面的“提供进行更新的用户界面”。

    更多详情请查看http://msdn2.microsoft.com/zh-cn/library/t71a733d(VS.80).aspx

    展开全文
  • 今天我们来探讨一下在ClickOnce部署中如何严格控制应用程序的权限。 演示应用 为了在下文中能更好地演示,我们先要做一个测试项目。也为了显得简单易懂,我使用最常用且最常见的WinForm项目,这是地球上最丰富的...
  • 滑动翻页效果实现和移动端click事件问题

    千次阅读 多人点赞 2021-01-23 13:19:32
    主要是为了总结和讲述移动端click和js事件机制导致的一些问题。 (:咳咳,其实几句话就能写完的还要水一篇文章,不愧是我… 正文 最近做了一个小活动,里面要用到一个效果:滑动翻页。大概是这样的: <!-- ...
  • struts2 拦截器Struts 2 token interceptor can be used to handle multiple form submission problem. While designing web application, sometimes we have to make sure that double form submission is treated ...
  • vue路由登录拦截器_Vue路由器

    千次阅读 2020-08-28 14:49:10
    vue路由登录拦截器 介绍 (Introduction) In a JavaScript web application, a router is the part that syncs the currently displayed view with the browser address bar content. 在JavaScript Web应用程序中,...
  • chrome浏览器拦截广告Google Chrome now has a built-in ad blocker, designed to get rid of the ads that are intrusive or otherwise annoying, but allow ads from sites that follow specific guidelines....
  • 说明:修改现有控件的功能–>“子类化”技术 SetWindowLong()、...#pragma once class CDoubleEdit { public: CDoubleEdit(); ~CDoubleEdit(); BOOL Attach(HWND hWnd);//绑定文本框控件 void DeAttach...
  • 现在的接口位置位于 IRequestHandler.GetResourceRequestHandler -> IResourceRequestHandler.GetResourceResponseFilter 这次主要是拦截get返回的数据,所以写了个简单的拦截类,顺便把官方的注释搬了过来。...
  • 8. Once the certificate is added, double click it to open more details 9. Expand the Trust item 10. Select “Always trust” 11. Close Keychain Access and restart Chrome   Linux 1. Go to the...
  • dev分支 提交:fea:拦截window.open, 自定义窗口 【说明】: 为了引入VUE,使用了electron-forge,使得 electron-webpack跑起来会报错,因为我的目的是学习各个功能,还不是系统性的,所以暂时不理会这...
  • 拦截网页中的事件消息,CEF提供了一系列的接口回调类,提供各种事件回调函数,例如拦截获取键盘、鼠标、加载、显示、右键菜单、提示消息、状态变化、窗口打开关闭等,CEF都可以从网页上拦截捕捉消息事件,并通过回调...
  • 过滤器拦截器的理解Based on sources from across the internet, the total world population that speaks English is somewhere between 1 in 6 and 1 in 7. Despite this underwhelming minority of the world’s ...
  • Struts2拦截器详解

    千次阅读 2013-09-16 22:03:04
    Struts2(XWork)提供的拦截器的功能说明:   拦截器 名字 说明 Alias Interceptor alias 在不同请求之间将请求参数在不同名字件转换,请求内容不变 Chaining ...
  • .stop 阻止事件向上(向父级)冒泡 ...main v-on:click="listener($event, 'Outer')"> Outer <section v-on:click="listener($event, 'Middle')"> Middle <!-- .stop阻止此元素向上冒泡 --> <a v-
  • 按照如何使用Helm Package Manager在Kubernetes群集上安装软件的步骤1和2中概述的说明,将Helm安装在开发服务器上,并将Tiller安装在群集上 。 Docker installed on your development server. If you are working ...
  • 适用于 Linux 的 Windows 子系统安装指南 (Windows 10)Windows Subsystem for Linux Installation Guide for Windows 1009/15/2020本文内容安装适用于 Linux 的 Windows 子系统 (WSL) 时有两个选项:There are two ...
  • debian tomcat 介绍 ... 安装curl : sudo apt install curl sudo apt安装curl Now, use curl to download the link that you copied from the Tomcat website: 现在,使用curl下载从Tomcat网站复制的链接: curl -O ...
  • 我们可以在全局安装jest或者局部安装,然后在packages.json中指定测试脚本: { "scripts": { "test": "jest" } } 当我们运行npm run test时会自动运行测试目录下所有测试文件,完成测试;我们在jest官网可能还会...
  • 测试用例必须能够「write once, run everywhere」。 提交前的快速测试,其目的就是预防 Bug ,而不是发现 Bug 。 需要建设工具与平台,让开发人员在提交代码之前,就能够很方便地来检查代码的质量。 避免性能下降 ...
  • } } 复制代码 响应式数据原理详解 传送门[3] 11 Vue 如何检测数组变化 数组考虑性能原因没有用 defineProperty 对数组的每一项进行拦截,而是选择对 7 种数组(push,shift,pop,splice,unshift,sort,reverse)方法...
  • 前沿 置身世外只为暗中观察!!!Hello大家好,我是魔王哪吒!重学巩固你的Vuejs知识体系,如果有哪些知识点遗漏,还望在评论中说明,让我可以及时更新本篇...安装Vuejs 体验Vuejs MVVM架构:data和Vue对象的分离,Vu
  • axios的拦截器:请求和响应 vuejs原理相关:响应式原理,源码。 vue.js是什么 vue是一套用于构建用户界面的渐进式框架。 从自底向上逐层应用,核心库是只关注图层。 易于学习,便于与第三方库或既有项目整合。 Vue...
  • webpack配置和vue安装&指令 一、单页面应用(SPA) 1.1 C/S到B/S页面架构的转变 C/S:客户端/服务器(Client/Server)架构的软件。 C/S 软件的特点: ① 从window桌面双击打开 ② 更新的时候会...
  • (给达达前端加星标,提升前端技能)面试官问:Vue如何安装的呢?达达回答:Vue的安装可以从两个方面进行安装,第一种是CDN引入,第二种是NPM安装。CDN引入<script sr...
  • Vue开发小技巧

    千次阅读 2019-10-14 14:03:29
    Vue 3.x 的Pre-Alpha 版本。后面应该还会有 Alpha、Beta 等版本,预计至少要等到 2020 年第一季度才有可能发布 3.0 正式版; 所以应该趁还没出来加紧打好 Vue2.x 的基础; Vue基本用法很容易上手,但是有很多优化的写法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,631
精华内容 652
关键字:

clickonce安装拦截