C#实现Web链接启动应用程序

最近需要配合Web端实现用户点击链接来启动应用程序并且需要能够传参数给应用程序。

那么就可以使用注册表来实现这个功能

编写注册表可以在软件安装程序中加入,也可以在软件启动后在软件中编写注册表,在软件安装程序中编写注册表这里就不多说了,这里记录一下C#实现注册表的编写。

if (Registry.ClassesRoot.OpenSubKey(RJCommon.ProtocolName) != null)
return;
RegistryKey registryKey = Registry.ClassesRoot.CreateSubKey(RJCommon.ProtocolName);
registryKey.SetValue(string.Empty, RJCommon.ProtocolName);//名称为空的是设置默认值
registryKey.SetValue("URL Protocol", Application.ExecutablePath);
registryKey.CreateSubKey("DefaultIcon").SetValue(string.Empty, $"{Application.ExecutablePath},1");
RegistryKey shell = registryKey.CreateSubKey("shell");
shell.SetValue(string.Empty, "open");
RegistryKey open = shell.CreateSubKey("open");
open.SetValue(string.Empty, "open");
open.CreateSubKey("command").SetValue(string.Empty, $"\"{Application.ExecutablePath}\" %1");
registryKey.Close();

这样就实现了软件自注册注册表了。特别注意一下设置默认值时需要键值为空就可以设置默认值了,我在这个地方折腾过,在注册表文件编写中是填写'@'符号,这里使用'@'是不能设置默认值的,切记。那么Web端如何调用呢?也很简单

<a href="RDP:{'ip':'127.0.0.0','user':'user','pwd':'1536'}">打开远程控制</a>

其中RDP就是C#中RJCommon.ProtocolName的值,且必须后面紧跟冒号':'符号,后面就是带的参数了。

C#中接收这些参数就简单了。可以使用static void Main(string[] args)中传入的args参数获取,或者使用Environment.CommandLine来获取,Environment.CommandLine会多传入一个程序路径的值。

注册表文件编写

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\RDP]
@="RDP"
"URL Protocol"="D:\\BaiduNetdiskDownload\\RdpClient\\RdpClient.exe"
[HKEY_CLASSES_ROOT\RDP\DefaultIcon]
@="D:\\BaiduNetdiskDownload\\RdpClient\\RdpClient.exe,1"
[HKEY_CLASSES_ROOT\RDP\shell]
@="open"
[HKEY_CLASSES_ROOT\RDP\shell\open]
@="open"
[HKEY_CLASSES_ROOT\RDP\shell\open\command]
@="\"D:\\BaiduNetdiskDownload\\RdpClient\\RdpClient.exe\" %1"

保存为.reg为后缀的文件,双击执行即可

C#实现Web链接启动应用程序的更多相关文章

  1. 从web页面启动winform程序的实现方法

    本文实现的需求是: A.通过web页面启动winform程序: B.将页面的参数传递给winform程序: C.winform程序已经启动并正在运行时,从web页面不能重新启动winform程序,只是 ...

  2. Windows和Mac浏览器启动本地程序

    前言 这几天有个需求,需要在IE上启动本地程序,就如下面一样. 一开始,我还以为IE有提供特殊的接口,类似上图中的“RunExe”,可以找了大半天觉得不对经(找不到该方法). 后来想想不对,这种方式是 ...

  3. Spring Boot移除内嵌Tomcat,使用非web方式启动

    前言:当我们使用Spring Boot编写了一个批处理应用程序,该程序只是用于后台跑批数据,此时不需要内嵌的tomcat,简化启动方式使用非web方式启动项目,步骤如下: 1.在pom.xml文件中去 ...

  4. 转载:如何让spring mvc web应用启动时就执行

    转载:如何让spring mvc web应用启动时就执行特定处理 http://www.cnblogs.com/yjmyzz/p/4747251.html# Spring-MVC的应用中 一.Appl ...

  5. Win10 VC++6 无法启动此程序,因为计算机中丢失mfc42d.dll 需要提升

    亲测可用 1.无法启动此程序,因为计算机中丢失mfc42d.dll 我也遇到了这个问题,并且顺利解决了!按一下流程搞定的: “工程-设置-常规-microsoft基础类,(选择使用MFC作为静态链接库 ...

  6. 吉特仓库管理系统(开源)-如何在网页端启动WinForm 程序

    在逛淘宝或者使用QQ相关的产品的时候,比如淘宝我要联系店家点击旺旺图标的时候能够自动启动阿里旺旺进行聊天.之前很奇怪为什么网页端能够自动启动客户端程序,最近在开发吉特仓储管理系统的时候也遇到一个类似的 ...

  7. WEB容器启动——web.xml加载详解

    最近在看spring的源码,关于web.xml文件在容器(Tomcat.JBOSS等)启动时加载顺序问题很混乱,通过搜集资料,得出以下的结论: 1.加载顺序与它们在 web.xml 文件中的先后顺序无 ...

  8. redis的单实例配置+web链接redis

    [root@cache01 src]# wget http://download.redis.io/redis-stable.tar.gz [root@cache01 src]# tar -xzvf ...

  9. Java虚拟机的启动与程序的执行

    这篇文章是从 OpenJDK 源码的角度讲当我们执行了 java -classpath . hello 之后,java.exe 怎样从 main 函数開始运行,启动虚拟机,并运行字节码中的代码. 实验 ...

随机推荐

  1. 堤堤云海外IDC

    http://www.ddyidc.com 堤堤云网络全球互联 堤堤云网络致力为客户提供优质的海外服务器租用服务,各种专线解决方案. 产品分类:服务器租用.IP租用.托管.专线传输.防御.优质回国CN ...

  2. 大哥带的JavaScript伪协议

    将javascript代码添加到客户端的方法是把它放置在伪协议说明符javascript:后的URL中.这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的 ...

  3. sqli-labs(43)

    0X01和42关比起来 只是闭合变了 那么我们可以构造 ');insert into users values(98,'zhong','zhong')# 成功注入

  4. 13.多线程设计模式 - Future模式

    多线程设计模式 - Future模式 并发设计模式属于设计优化的一部分,它对于一些常用的多线程结构的总结和抽象.与串行相比并行程序结构通常较为复杂,因此合理的使用并行模式在多线程并发中更具有意义. 1 ...

  5. Spring boot之使用thymeleaf

    操作步骤 (1)在pom.xml中引入thymeleaf; (2)如何关闭thymeleaf缓存 (3)编写模板文件.html (4)编写访问模板文件controller 在pom.xml中引入thy ...

  6. Eclipse常用快捷键与IDEA中的对比.

    最近从github下载了一些项目,但是看了一下使用的编译器是IDEA的,所以就下载了一个IDEA. 这边可以提供几个网址:只要是针对各个下载idea之后的一些激活相关的帮助. http://idea. ...

  7. leetcode-easy-trees-98. Validate Binary Search Tree-NO

    mycode   不会 注意:root的值要比左子树上所有的数大 参考 # Definition for a binary tree node. # class TreeNode(object): # ...

  8. Linux高级调试与优化——进程管理和调度

    进程管理 进程和文件是Linux操作系统的两个最基本的抽象. 进程是处于执行期的程序,进程不仅仅局限于一段可执行程序代码,通常还包含其他资源,如打开的文件.挂起的信号.内核内部数据.处理器状态.进程地 ...

  9. 万变的Web,不变的CRUD

    用JSP+Servlet写程序,到Struts,Spring,hibernate写程序,到现在Spring Cloud分布式写程序,到底有多大区别,是不是还在写CRUD? 看着JD上各种要求,简直是S ...

  10. golang tcp keepalive实践

    前文中已经介绍了TCP keep alive的做了详尽说明,本文结合golang,介绍如何使用TCP keep alive. 目前golang net包不提供TCP keep alive 空闲多长时间 ...