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" 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程序的更多相关文章
- windows下调用外部exe程序 SHELLEXECUTEINFO
本文主要介绍两种在windows下调用外部exe程序的方法: 1.使用SHELLEXECUTEINFO 和 ShellExecuteEx SHELLEXECUTEINFO 结构体的定义如下: type ...
- c# 调用外部exe程序
c#调用外部exe程序,首先要 using System.Diagnostics; 然后开启一个新process System.Diagnostics.ProcessStartInfo p=null; ...
- C# 将外部exe程序 嵌入到自己的窗体界面
将别人开发的exe程序,放到自己的窗体里面来运行. 1.基本功能实现 首先,在自己的窗体后面加上代码: [DllImport("User32.dll", EntryPoint = ...
- QT生成可执行的EXE程序
[转载] Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行.因此 Qt 官方开发环境里 ...
- WPF 程序中启动和关闭外部.exe程序
当需要在WPF程序启动时,启动另一外部程序(.exe程序)时,可以按照下面的例子来: C#后台代码如下: using System; using System.Collections.Generic; ...
- [转]VC中调用外部exe程序方式
本文转自:http://blog.sina.com.cn/s/blog_486285690100ljwu.html 目前知道三种方式:WinExec,ShellExecute ,CreateProce ...
- 转 Java jar (SpringBoot Jar)转为win可执行的exe程序
原文链接:http://voidm.com/2018/12/29/java-jar-transform-exe/打包Jar工程 将java项目打包成jar工程,可以是文章以SpringBoot为例po ...
- C#检测外部exe程序弹窗错误,并重启
private void button2_Click(object sender, EventArgs e) { string mainTitle = System.Configuration.Con ...
- 启动外部exe程序
Process myProcess = new Process();myProcess.StartInfo.FileName = pathName;myProcess.Start();其中的pathN ...
随机推荐
- nginx url重写 rewrite实例
本文介绍下,在nginx中实现Url重写,学习rewrite的具体用法,有需要的朋友参考下吧. 原文地址:http://www.360doc.com/content/14/0202/20/142341 ...
- SQL SERVER 2008 R2 还原数据库3154错误
1.SQL SERVER 2008 在还原数据库时,会报错. 提示错误:"备份集中的数据库备份与现有的 '***' 数据库不同.RESTORE DATABASE 正在异常终止. (Micro ...
- c#中winform的MVP模式的简单实现
MVP模式是类似于MVC模式的一种设计模式,最近在做项目学习过程中遇到,弄了很久终于有一些眉目,这是学习过程中的一些笔记.MVP指的是实体对象Model.视图Viw和业务处理Presenter.MVP ...
- ViewGroup 和 View 事件传递及处理小谈
前言 在自定义组件的时候少不了会去处理一些事件相关的东西,关于事件这块网上有很多文章,有说的对的也有说的不对的,我在理解的时候也有过一段时间的迷惑,现在把自己理解的东西写下来,给有相同疑问的朋友提供些 ...
- php变量那些事:学习过程中遇到的关于php变量的有趣的问题(不断发现不断更新)
不断发现……,不断更新……,不断寻找答案……例子的测试环境:php5.3,win7,64位Num1:<?$a=array(1,2,3,4,5,6); $b=$a;$m=memory_get_us ...
- linux安装至少有哪两个分区,各自作用是什么?
1.至少有/代表根分区,/swap代表的意思是交换分区. 2.swap相当于缓存的作用:
- [重点翻译] ASP.NET 4.6的更新 -- 本文只摘录 Web Forms的部分
原文出处:[重点翻译] ASP.NET 4.6的更新 -- 本文只摘录 Web Forms的部分 http://www.dotblogs.com.tw/mis2000lab/archive/2015/ ...
- c++ 类与函数中static变量初始化问题(转)
首先static变量只有一次初始化,不管在类中还是在函数中..有这样一个函数: void Foo() { ; // initialize std::cout << a; a++; } 里的 ...
- SPARK 数据统计程序性能优化。
昨天写完R脚本 没测试就发到博客里, 结果实际运行发现很慢,运行时间在2小时以上, 查看spark控制台, 大量时间消耗在count上, 产生的stage多大70多个 . 分析原因. 1 selec ...
- Linq的一些记录
1. IQueryable接口与IEnumberable接口的区别: IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了, ...