为什么要学习网页调用本地exe?因为项目有一个需求,就是通过页面的按钮,点击调用本地的GUWP(exe软件),使其可以直接登录和打开。
而exe应用软件,它只能通过cmd进行操作和数据的传递。
通过注册表reg文件,将网络协议(guwp://....)注入到注册表中,通过url的命令,直接启动本地exe软件。比如QQ或者百度网盘等,如果你机器本地已经有exe了,在网页上会直接去把你机器本地的exe给调起来。
exe软件代码(需要pyrthom依赖)【guwp.exe文件放在附录】
import sys
from tkinter import messagebox
def mmain(args:list):
if len(args) > 0:
messagebox.showinfo("提示", "您的参数为:{}".format(args))
else:
messagebox.showinfo("提示", "您一个参数都没有。。。")
if __name__ == '__main__':
# print(sys.argv)
mmain(sys.argv[1:])
将python代码打包成exe文件
打开cmd,输入:pip install pyinstaller,安装打包软件。

进入存放guwp.py的文件夹下(D:\test),通过地址栏输入:cmd

在guwp.py的文件下打开cmd,输入:pyinstaller -F "guwp.py"

打包好exe软件,会在dist文件夹下(D:\test\dist)生成exe文件。

复制到测试文件下(D:\guwp)

打开cmd,输入:D:\guwp\guwp.exe 11111111111111111

exe软件执行成功,会出现提示框,并且展示输入的参数内容。

reg注册文件代码【guwp.reg文件放在附录】
若要执行其他exe文件,只需修改上面的本地路径(D:\\guwp\\guwp.exe)
若想接收参数,在最后一行的格式定义上加上“%1”,这个字符串代表可以接收参数。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\guwp]
"URL Protocol"="D:\\guwp\\guwp.exe"
@="guwProtocol"
[HKEY_CLASSES_ROOT\guwp\DefaultIcon]
@="D:\\guwp\\guwp.exe"
[HKEY_CLASSES_ROOT\guwp\shell]
[HKEY_CLASSES_ROOT\guwp\shell\open]
[HKEY_CLASSES_ROOT\guwp\shell\open\command]
@="\"D:\\guwp\\guwp.exe\" %1"
若想不接收参数,可直接不写
@="\"D:\\guwp\\guwp.exe\"
网络协议的生效只和注册表的路径名称有关!比如下面路径(HKEY_CLASSES_ROOT\guwp1)
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\guwp1]
"URL Protocol"="D:\\guwp\\guwp.exe"
@="guwProtocol"
[HKEY_CLASSES_ROOT\guwp1\DefaultIcon]
@="D:\\guwp\\guwp.exe"
[HKEY_CLASSES_ROOT\guwp1\shell]
[HKEY_CLASSES_ROOT\guwp1\shell\open]
[HKEY_CLASSES_ROOT\guwp1\shell\open\command]
@="\"D:\\guwp\\guwp.exe\" %1"
点击guwp.reg将URL Protocl注入注册表中


检查注册表中是否存在guwp的这个网络协议,打开win+R,输入:regedit,打开注册表编辑器。

测试guwp协议是否注册成功,在URL栏输入:guwp://111111111111

回车enter,就会出现要打开guwp.exe

就能够调用本地的exe软件,并且将参数传入到exe软件中。
这个通过网络协议的参数传递是带有guwp://格式的,和通过cmd启动exe的参数形式不一样。

前端可以通过js代码直接获取本地计算器权限,调用cmd执行代码,这是功能只能在ie浏览器进行,其他浏览器不支持。
JAVAscript执行cmd代码
var cmd = new ActiveXObject("WScript.Shell");
cmd.run("D:\\guwp\\guwp.exe 11111111111111111");");
执行这段代码,需要打开ie浏览器的权限功能,重新启动ie。

打开ie浏览器的开发工具,进入控制台,输入js代码。

点击运行,会出现执行guwp文件提示。

点击允许,这就是直接执行cmd命名,调用gwup.exe。

注意:这个功能方法虽然可以通过前端调用cmd,执行exe软件,但是有个严重的安全问题,就是网页可以通过cmd获取到你的计算权限,如果他人要是执行文件清除等命令,后果不堪设想。所以一般禁止使用这个功能,使用网络协议调用本地的exe软件,才是正确的方法。
4.1. 代码附带文件
reg注册文件(去掉.txt),exe软件代码(去掉.txt)
【鄙视不支持txt文件上传】
链接:https://pan.baidu.com/s/1xSuObg5qf1_oeEMhwxommQ
提取码:vkju
4.2. 素材来源
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我正在尝试在Ruby中制作一个cli应用程序,它接受一个给定的数组,然后将其显示为一个列表,我可以使用箭头键浏览它。我觉得我已经在Ruby中看到一个库已经这样做了,但我记不起它的名字了。我正在尝试对soundcloud2000中的代码进行逆向工程做类似的事情,但他的代码与SoundcloudAPI的使用紧密耦合。我知道cursesgem,我正在考虑更抽象的东西。广告有没有人见过可以做到这一点的库或一些概念证明的Ruby代码可以做到这一点? 最佳答案 我不知道这是否是您正在寻找的,但也许您可以使用我的想法。由于我没有关于您要完成的工作
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru