这两天研究下.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" onclick="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" onclick="exec()" value="执行EXE2" />

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

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

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

首先,浏览器要是IE内核

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

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

3、其他:

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

C#和asp.net执行外部EXE程序的更多相关文章

  1. windows下调用外部exe程序 SHELLEXECUTEINFO

    本文主要介绍两种在windows下调用外部exe程序的方法: 1.使用SHELLEXECUTEINFO 和 ShellExecuteEx SHELLEXECUTEINFO 结构体的定义如下: type ...

  2. c# 调用外部exe程序

    c#调用外部exe程序,首先要 using System.Diagnostics; 然后开启一个新process System.Diagnostics.ProcessStartInfo p=null; ...

  3. C# 将外部exe程序 嵌入到自己的窗体界面

    将别人开发的exe程序,放到自己的窗体里面来运行. 1.基本功能实现 首先,在自己的窗体后面加上代码: [DllImport("User32.dll", EntryPoint = ...

  4. QT生成可执行的EXE程序

    [转载] Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行.因此 Qt 官方开发环境里 ...

  5. WPF 程序中启动和关闭外部.exe程序

    当需要在WPF程序启动时,启动另一外部程序(.exe程序)时,可以按照下面的例子来: C#后台代码如下: using System; using System.Collections.Generic; ...

  6. [转]VC中调用外部exe程序方式

    本文转自:http://blog.sina.com.cn/s/blog_486285690100ljwu.html 目前知道三种方式:WinExec,ShellExecute ,CreateProce ...

  7. 转 Java jar (SpringBoot Jar)转为win可执行的exe程序

    原文链接:http://voidm.com/2018/12/29/java-jar-transform-exe/打包Jar工程 将java项目打包成jar工程,可以是文章以SpringBoot为例po ...

  8. C#检测外部exe程序弹窗错误,并重启

    private void button2_Click(object sender, EventArgs e) { string mainTitle = System.Configuration.Con ...

  9. 启动外部exe程序

    Process myProcess = new Process();myProcess.StartInfo.FileName = pathName;myProcess.Start();其中的pathN ...

随机推荐

  1. 比较合并工具vimdiff的主要用法归纳

    参考:https://www.ibm.com/developerworks/cn/linux/l-vimdiff/ vimdiff主要用法归纳如下:   1.打开文件 vimdiff file1 fi ...

  2. js的变量作用域 ,变量提升

    (function(){ a = 5; alert(window.a); var a = 10; alert(a); })(); 结果: undefined 10 代码等同于下面 var a = un ...

  3. Oracle一些常用的查询命令总结(持续更新)

    更新于:2015年1月28日 17:08:13 -------------------------表空间 --------------------------------------- ----- 查 ...

  4. CentOS 6.x版本升级Mysql

    首先确定一下自己的DNS  vi /etc/resolv.conf    我一般为114.114.114.114 #-----------------------------CentOS 6.x版本升 ...

  5. Java----代码优化篇

    一.咱们之所以这么干的目的: 1.效率(最重要) 2.可读性,便于后期维护.(同样很重要) 二.代码优化的要求: 1.减小代码的体积. 2.提高代码的运行效率. 三.常用的代码的优化: 1.尽量重用对 ...

  6. 打印日志 Log

    Log.v(tag,msg);所有内容 Log.d(tag,msg);debug Log.i(tag,msg);一般信息 Log.w(tag,msg);警告信息 Log.e(tag,msg);错误信息

  7. DevExpress 中 在做全选的全消功能的时候 加快效率

    在做 DevExpress 中对增加的选择 Check列 控制全选的全消时通过以下代码红色字代码效率会有明显的提升: private void CheckedRow() { try { splashS ...

  8. WebService IIS 部署

    刚刚开始接触c#怎么发布程序都搞不定,经过查看网上同仁的资料,自己写了个Webservice发布了下 1.首先自己写好程序,鼠标选中所写Webservice程序,单击鼠标右键-------->发 ...

  9. 实战Django:简易博客Part1

    舍得学习新技能的时候,通常不喜欢傻读书--捧着一本阐述该项技能的书籍,然后傻看,一路看下来,脑子里塞满了新的概念.知识点,头是越来越大,但技能却几乎没掌握半分. 多年来,舍得养成了用做实例来学习新技能 ...

  10. python 内存管理

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 语言的内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言的 ...