当前位置: 首页 > news >正文

C#和asp.net执行外部EXE程序

这两天研究下.Net的执行外部EXE程序问题,就是在一个程序里通过按钮或其他操作运行起来另外一个程序,需要传入参数,如用户名、密码之类(实际上很类似单点登录,不过要简单的多的多);总结如下:

1、CS版:WebForm的调用外部程序,很简单

(1)如果不考虑参数问题,仅仅是执行另外一个程序,用:System.Diagnostics.Process.Start("')即可:

如:System.Diagnostics.Process.Start("D:\\首字母拼音码.exe", "");

(2)如果需要传入参数,最好使用ShellExecute:

如:程序1中执行程序2,并将用户名和密码传入程序2

首先,程序1中某个页面:

添加引用:using System.Runtime.InteropServices;

在按钮事件的外面添加:

[DllImport("shell32.dll ")]
public static extern int ShellExecute(IntPtr hwnd, StringBuilder lpszOp, StringBuilder lpszFile, StringBuilder lpszParams, StringBuilder lpszDir, int FsShowCmd);

最后,按钮事件:

private void button3_Click(object sender, EventArgs e)
{

ShellExecute(IntPtr.Zero, new StringBuilder("Open"), new StringBuilder("D:\\首字母拼音码.exe"), new StringBuilder("用户名 密码"), new StringBuilder(""), 1);

}

方法的第三个参数是:外部EXE程序的路径和名称;第四个参数是:要传入的用户名和密码,用空格分隔;

其他参数就不细说了,有兴趣的自己在网上找找吧。

 

其次:程序2需要接收参数:

Program文件里:

[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1(args));
}

Form1文件里:

private string _Name = "";
private string _Pwd = "";
public Form1(string[] args)
{
InitializeComponent();
if (args != null && args.Length > 1)
{
_Name = args[0].ToString();
_Pwd = args[1].ToString();
}
}

_Name和_Pwd两个公用变量就得到了传送过来的参数。

 

运行程序1,点击按钮,即可打开程序2,并得到两个参数值。

2、BS:WebForm版本执行外部程序,比较要命,因为我们需要在客户端调用,而按照CS版本写的话,在VS里可以运行,但是部署到IIS后访问,就没有反应了,目前发现的方法是使用脚本来实现:

(1)无参数:程序1中,添加script脚本,

<script>
function exec(command) {

var wsh = new ActiveXObject("WScript.Shell");
if (wsh) {
wsh.Run(command);
}

}
</script>

然后:<input type="button" οnclick="exec('D:\\首字母拼音码.exe')" value="执行EXE" />

(2)有参数:程序1中,

<script>
function exec() {

var temp = document.getElementById('Hidden1');
var path = document.getElementById('Hidden2');
var ShellApp = new ActiveXObject("Shell.Application");
ShellApp.ShellExecute(path.value, temp.value)

}
</script>

说明下:Hidden1和Hidden2是两个隐藏域,用于存放【用户名、密码】和【程序2的地址】

然后:<input type="button" οnclick="exec()" value="执行EXE2" />

程序2和CS中的设置一致。

发布后,只要客户端有程序2,路径和设置的一致,就可以打开

 

对了,BS版本用该方法有些地方要注意:

首先,浏览器要是IE内核

其次,在浏览器的“Internet选项”,选择“安全”,将程序1的网址加入到“可信任站点”

其次,点“自定义级别”,选择“ActiveX控件和插件”中的“对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本‘,选择”启用“(一般是禁用),保存即可

 

3、其他:

其他方法还有很多,不过感觉不大方便,比如修改计算机注册信息等;需要时再从网上找找吧(不过BS的仅找到这么一个方法,其他的无法再IIS部署后使用,以后有时间再研究吧)

 

转载于:https://www.cnblogs.com/jiutianxingchen/p/3696757.html

相关文章:

  • 2018.10.23-dtoj-1608新三国争霸(fight)
  • 玩转html5(三)---智能表单(form),使排版更加方便
  • 推荐C++程序员阅读《CLR via C#》
  • 高级 Vue 组件模式 (7)
  • 第一天在某品牌电脑店工作
  • 项目启动时出错的处理
  • 蟠桃记
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • Python标准库05 存储对象 (pickle包,cPickle包)(转载)
  • 软件工程-冲刺周
  • freemarker中常用的shiro标签
  • 企业该分多少钱给员工?看柏明顿阿米巴奖金分配方案
  • Ubuntu下部署java JDK和eclipse IDE
  • Docker镜像的目录存储讲解
  • SpringBoot中Mybaties PageHelper插件使用
  • Apache Pulsar 2.1 重磅发布
  • Docker入门(二) - Dockerfile
  • FastReport在线报表设计器工作原理
  • JS学习笔记——闭包
  • PaddlePaddle-GitHub的正确打开姿势
  • Redis字符串类型内部编码剖析
  • Sass Day-01
  • Shell编程
  • VUE es6技巧写法(持续更新中~~~)
  • 区块链技术特点之去中心化特性
  • 详解移动APP与web APP的区别
  • 小试R空间处理新库sf
  • 用quicker-worker.js轻松跑一个大数据遍历
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • Python 之网络式编程
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • #162 (Div. 2)
  • #laravel 通过手动安装依赖PHPExcel#
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转)用.Net的File控件上传文件的解决方案
  • (自用)仿写程序
  • 、写入Shellcode到注册表上线
  • .NET CLR Hosting 简介
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net快速开发框架源码分享
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .NET中winform传递参数至Url并获得返回值或文件
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
  • @Autowired 和 @Resource 区别的补充说明与示例
  • [20150321]索引空块的问题.txt