关于发布后网站调用本地exe的曲线救国之路

  • web调用本地exe-尝试一
    • 普遍方法:使用Process来调用应用程序
    • 优缺点
      • 优点
      • 缺点
  • web调用本地exe-尝试二
    • 优缺点
      • 优点
      • 缺点
  • web调用本地exe-最终版之曲线救国
    • 优缺点
      • 优点
      • 缺点
  • 鸣谢与声明

注意:本文实现为C#+iis7+win10

web调用本地exe-尝试一

普遍方法:使用Process来调用应用程序

话不多说,上代码

// An highlighted block
//定义Process prc = new Process();//调用的程序,cmd可以不写路径,但其他应用程序必须写完整路径(应该是哈)prc.StartInfo.FileName = "cmd.exe";//配置信息-使用控制台(出不出小黑框)prc.StartInfo.UseShellExecute = false;//配置信息-重定向输入位置(true为由代码输入,false为小黑框中自己写)prc.StartInfo.RedirectStandardInput = true;//配置信息-重定向输出位置(true:代码可以接收返回值,false:不可以)prc.StartInfo.RedirectStandardOutput = true;//配置信息-使用错误信息位置(同上)prc.StartInfo.RedirectStandardError = true;//配置信息-是否不创建窗体(自己理解吧)prc.StartInfo.CreateNoWindow = true;//配置完成,开启prc.Start();//输入命令,exit必须要啊,不然你会接收不到返回值prc.StandardInput.WriteLine('你想干啥啊'+"&exit");//接收返回值result = prc.StandardOutput.ReadToEnd();//等待进程结束prc.WaitForExit();//关闭prc.Close();

优缺点

优点

1.好调试,哪里错了点哪里
2.对于不需要发布的程序来说这就够了
3.简单,不会因为对计算机不熟悉导致更改计算机配置出问题

缺点

1.发布之后无效
iis上,由于iis的安全限制,一旦应用程序发布后,该代码能够正常运行,但却是与用户的电脑环境隔离的,无论怎么调整都没用的,相信我~ 我刚开始看网上的那些教程,改这个配置,改那个配置,完全无效,丫的真怀疑他们是怎么实现的
2.发布后调试艰难

web调用本地exe-尝试二

经过一番尝试之后,我放弃了第一种尝试办法,查了很多资料后采用方法二:注册表
这种办法就是常见的点个链接,然后打开迅雷外挂那种
仍然不多说,看代码

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Diff]
"URL Protocol"="C:\\xxxClient\\client.exe"
@="DiffProtocol"
[HKEY_CLASSES_ROOT\Diff\DefaultIcon]
@="C:\\xxxClient\\client.exe,1"
[HKEY_CLASSES_ROOT\Diff\shell]
[HKEY_CLASSES_ROOT\Diff\shell\open]
[HKEY_CLASSES_ROOT\Diff\shell\open\command]
@="\"C:\\xxxClient\\client.exe\" \"%1\""  HKEY_CLASSES_ROOT\Diff是你添加的注册表的位置,Diff是你的注册表的目录,也是你调用的时候使用的名字
C:\\xxxClient\\client.exe是你要调用的程序的地址
%1是你要传给程序的参数
将上述代码保存为.reg格式的注册表项文件,双击运行即可
要看有没有问题,就去注册表下查看对应的注册表就OK啦,我就不多说了
你需要看的就是Diff项、DefaultIcon项、command项的值是不是你写在代码中的值
by the way, 打开注册表为win+r, regedit另外,html中调用只需要如此如此:
<a href=“Diff://参数”>你点击的链接</a>
其中"Diff://"对应的你的注册表名字

优缺点

优点

1.web程序发布后也能用
2.与语言无关

缺点

1.很难调试
2.真的很难调试
3.真的真的很难调试

其实到这步已经实现了我想要的功能,但是,他这么难调试,跟客户安装软件后出问题了我怎么办,所以我还要再想个办法~~~

另外,该方法不能传递中文参数,因为页面上的href链接如果有中文,你懂的

web调用本地exe-最终版之曲线救国

最终版其实还是使用的方法二(别说我不宠方法一,它那么死皮赖脸的行不通,我也很无奈啊)
改进思路是我不直接调用应用程序,先调用批处理,再由批处理调用程序
改进如下:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Diff]
"URL Protocol"="C:\\xxxClient\\client.bat"
@="DiffProtocol"
[HKEY_CLASSES_ROOT\Diff\DefaultIcon]
@="C:\\xxxClient\\client.bat,1"
[HKEY_CLASSES_ROOT\Diff\shell]
[HKEY_CLASSES_ROOT\Diff\shell\open]
[HKEY_CLASSES_ROOT\Diff\shell\open\command]
@="\"C:\\xxxClient\\client.bat\" \"%1\""  这里我将C:\\xxxClient\\client.exe替换成了C:\\xxxClient\\client.bat  and  C:\\xxxClient\\client.bat文本如下://关闭echo显示,你要想看每一步的实现过程,改为on或这取消这一行就行,具体我也不懂,自己查去~
@echo off
//定义变量,接收参数
set arg1=%1
//处理参数,由href传递过来的参数格式为: “diff://你的参数”,所以需要进行一下处理才能使用
//~8意为从第8个字符开始,-1意为截取ga到length-1,同时,这一行实际上是执行命令
//例如我传递的参数为 “diff://ping www.baidu.com”,解析后的字段为 ping www.baidu.com ,同时会执行该命令
%arg1:~8,-1%
//输出你的命令
echo %arg1%
//调试时候用,能够看到你传递的参数到底是什么,正式部署后改为exit,能够在命令执行结束后关闭小黑框
pause调用方式还是那样
<a href=“Diff://参数”>你点击的链接</a>

优缺点

优点

1.克服了方案二不能调试的问题,同时也克服了方案一不能发布后使用的问题
2.允许自定义调用逻辑
3.避免了对注册表的频繁改动,需要改动的时候只用改bat文件即可

缺点

1.传递的参数还是不能使用中文路径
2.对系统造成了影响,客户端必须运行注册表项并拥有.bat文件

注意:.bat文件编码为ANSI,否则.bat文件内部的中文会乱码

鸣谢与声明

写这篇文章之前查看了很多博客,因为没有记录,所以不知道都是哪位的,这里感谢这些博主了~
另外啊,文中的例子实际上是参照了其他博客,然后自己实现了一遍,所以会跟其他博客的内容差不多,只是加入了我的理解

关于发布后网站调用本地exe的曲线救国之路相关推荐

  1. 网页(浏览器)调用本地exe应用软件

    1. 背景 为什么要学习网页调用本地exe?因为项目有一个需求,就是通过页面的按钮,点击调用本地的GUWP(exe软件),使其可以直接登录和打开. 而exe应用软件,它只能通过cmd进行操作和数据的传 ...

  2. PHP 网页调用本地exe程序实例

    一.需求:在做网站的时候,有些网站网页面需要调用本地的exe程序. 二.方法:利用注册URL Protocol的方式. 代码如下: 1.视图文件里面的代码: <a href="fyex ...

  3. JavaScript 调用本地exe文件

    web项目中要调第三方客户端,于是归纳整理了js调用客户端exe程序的几种方法,如下:    方法一 :  使用ActiveXObject直接执行指定路径的.exe文件 ,此方法只针对IE浏览器 &l ...

  4. JS中调用本地exe程序

    场景 在网页中通过js调用Windows上本地的exe程序, 比如在浏览器中点击调用某播放器的exe程序. url protocol 的方式来实现.用这种方式实现,任何浏览器都兼容, 不会存在只有IE ...

  5. 发布后网站浏览时出现乱码

      如果页面编码是gb2312,可能会有此问题,请使用utf-8编码 使用WebDeployment Project改善VS2005发布网站问题 (三) 常见问题 http://www.cnblogs ...

  6. 【Web前端】---js调用本地应用程序

    最近进入了一个项目组,向大牛们一起学习如何搞开发,可谓是边开发边学习.就在前两天,我们的项目被领导们验收了一次,顺便给我们提了点新的需求,要求我们能够使用外在设备拍照上传.君要臣死,臣不能不死.更何况 ...

  7. uni-app开发h5 发布后背景图片找不到路径

    项目前提: 1.使用的是uni-app的UI框架uview; 2.项目有多套主题,需要根据不同主题获取不同样式及图片,所以需要根据主题获取此处背景图 代码如下(banner组件下方有个背景图,menu ...

  8. JS中调用本地Winform程序并传递参数

    场景 JS中调用本地exe程序: JS中调用本地exe程序_BADAO_LIUMANG_QIZHI的博客-CSDN博客 在上面的基础上怎样在js中调用本地winform程序并且传递参数. 注: 博客: ...

  9. phpcms发布新闻到数据库_Phpcms V9网站从本地上传到服务器需要修改的地方小结

    Phpcms V9网站从本地上传到服务器需要修改的地方小结 发布时间:2013-06-22 13:37:28   作者:佚名   我要评论 网站在本地做好后要迁移到服务器上:网站在发展的过程中,很可能 ...

最新文章

  1. 不要在桌面保存长期修改的文件否则系统挂了时候面临文件丢失的问题,长期总结面试资料(公司 题目 地址 氛围 加班情况 薪资情况)毁于一旦
  2. 为什么尽量避免使用 CSS 表达式
  3. python的GUI之Tkinter的Label组件
  4. JQuery 的跨域方法 可跨任意网站
  5. 工业轨式 1-16路 4-20MA 模拟量光端机产品介绍
  6. 库-libuv:概述
  7. LeetCode 560. 和为K的子数组(前缀和差分)
  8. 你怎么看待 Bug?
  9. 装修的九大风格,快来看看哪种适合你
  10. 如何用Python做好友管理系统
  11. xshell连接kali系统
  12. win11电脑开机密码忘记了怎么办?
  13. 003.宋浩老师《线性代数》笔记(第二章矩阵)(二)
  14. 初秋西安,终南山Linux内核问道之旅
  15. 电子工程师英年早秃?离高阶茂密工程师你只差这套工具!
  16. python爬取双色球历史数据_爬取双色球历史数据
  17. java poi生成word
  18. Web前端基础体验学习过程1 HTML篇
  19. python 控制键盘鼠标库pynput详解
  20. 北大直博保送生论文涉嫌抄袭?原作者实名举报,北大南开火速调查

热门文章

  1. 深度学习21_李宏毅_08_CNN
  2. vim与sublime,程序员的屠龙刀和倚天剑
  3. vscode实现边写边查
  4. ZUCC_计算机网络实验_实验01 实验一RJ45原理与制作
  5. 大数据毕业设计选题推荐(二)
  6. CF 1680 E. Moving Chips dp 2000
  7. 汽车众筹系统:加速建设汽车金融新生态!
  8. 基于c语言图像边缘检测的程序,图像边缘检测之拉普拉斯(Laplacian)C++实现
  9. HBuilderX插件安装系统找不到指定路径问题解决办法
  10. Trips and Users