.net调用外部exe
2016-01-07 09:48
141 查看
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控件初始化并执行脚本‘,选择”启用“(一般是禁用),保存即可
(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控件初始化并执行脚本‘,选择”启用“(一般是禁用),保存即可
相关文章推荐
- 邻近 算法 实例
- Fbx SDK 的.NET封装
- 使用FlyMcu将hex文件下载到智芯一号步骤
- 拥抱 Android Studio 之二:Android Studio 与 Gradle 深入
- 分段控件 (UISegmentedControl)
- python zip(), map()
- Debian 8 Tab命令无法自动补全
- android adb shel l命令使用 解决 Read-only file system
- 觉得比较好的资料汇集
- docker compose
- kickstart
- Android根据进程名获取对应的进程pid
- oc中查找指定字符串的位置,并且删除
- 【Linux高频命令专题(23)】tar
- CDH5..4.7+phoenix实现查询HBase异常:java.sql.SQLException: ERROR 1102 (XCL02): Cannot get all table regions
- Citrix ICA协议简要介绍
- 遍历json获得数据的几种方法
- 大数据学习之Scala中列表(List)的使用学习(5)
- 深入了解HTTP和Socket在实时性Web上的实践
- 对回调函数的一点理解