在Visual Studio的Web页面调用WinForm窗体方法

        在使用visual studio创建项目时,网站主体使用Web Application创建,部分功能使用WinForm窗体搭建。当时认为都是基于vs平台开发的项目,项目之间相互引用会很容易,但是实际上,web页面由于采用b/s架构,和WinForm架构不兼容,理论上是不允许web调用winform的。所以作为初学者想给大家分享一下我的解决方案。

        在web里调用winform,实际是在web页面里调用WinForm.exe这个位于本地的可执行文件,通过注册表调用这个.exe文件实现目标。文件在用户存放winform项目的bin目录里,如我的存放路径是这样子的“C:\Users\source\repos\winform窗体\winform窗体\bin\Debug”。

        第一步:创建一个txt文本,进行注册表生成指令编辑。

Windows Registry Editor Version 5.00 
[HKEY_CLASSES_ROOT\AnmCAD]
@="AnmCADProtocol" 
"URL Protocol"="C:\\Users\\source\\repos\\winform窗体\\winform窗体\\bin\\Debug\\winform窗体.exe" 
[HKEY_CLASSES_ROOT\AnmCAD\DefaultIcon] 
@="C:\\Users\\source\\repos\\winform窗体\\winform窗体\\bin\\Debug\\winform窗体.exe,1" 
[HKEY_CLASSES_ROOT\AnmCAD\shell] 
[HKEY_CLASSES_ROOT\AnmCAD\shell\open] 
[HKEY_CLASSES_ROOT\AnmCAD\shell\open\command] 
@="\"C:\\Users\\source\\repos\\winform窗体\\winform窗体\\bin\\Debug\\winform窗体.exe\" \"%1\""

         大概解释一下代码,HKEY就是在注册表里生成的文件夹顺序(如果要删除注册表已添加的事件,只需在HKEY前写一个减号即可),C:...路径是.exe项目在计算机中存储的绝对路径,要注意,这里的分割符不同于在文件夹复制的地址,是两个\\。AnmCAD是这个指令的名字。一会在web调用时会用到,可以按自己喜好去写。写完后更改文档后缀名为.reg,双击执行文件。可以在注册表编辑器中看到文件已经生成。

        注意:这里有一个小的问题,因为我的绝对路径里含有中文命名的文件,在编译中可能会出现汉字乱码导致无法正确指向可执行文件 ,所以最好检查一下数据部分是否和写入的一样。如果不一样直接复制刚才写的绝对路径,右键默认点击修改粘贴进去。

 

         第二步:在web中引用刚才生成的注册信息来调用exe文件

(1)<a href="AnmCAD://">调用AnmCAD</a>

        直接在前端使用该语句调用,://一定要加这个符号才行。

(2)rocessStartInfo startInfo = new ProcessStartInfo("AnmCAD://");
             startInfo.WindowStyle = ProcessWindowStyle.Minimized;//设置窗体打开尺寸为最小号
             Process.Start(startInfo);//打开事件AnmCAD

        使用button控件触发后端事件,上述为后端代码,进行调用。

         点击后浏览器显示如上弹窗,点击打开即可完成调用。

        总结,在网页中打开本地可执行程序是一种危险行为,所以这种方法要限制使用,测试中Microsoft 自带浏览器可以执行调用操作,如果还有更好的方法也可以评论区一起讨论,本文采用的方法来自多个CSDN博客,具体实现的时候很混乱没有记清是哪个博主的文章请见谅,只是总结一个可用的结果分享出来。入门小白分享的方法,有不足之处敬请批评指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值