首页 新闻 赞助 找找看

asp.net (C#)中执行exe应用程序

1
悬赏园豆:60 [已关闭问题] 关闭于 2010-04-08 18:47

具体功能描述如下:

点击网站页面上的按钮,执行本地的exe应用程序文件。这个文件类似QQ.exe客户端登陆器,也是一个即时通讯工具的客户端,目的就是为了点击这个页面上的这个按钮登录客户端。

具体代码如下:

1 string pathstr = "C:\\ActiveSoft\\ActiveMessenger\\AMsger.exe";
2 UserInfo user = new UserInfo();
3 user = UserInfoManager.SelectUserById(int.Parse(Session["currentuser"].ToString()));
4 ProcessStartInfo pro = new ProcessStartInfo();
5 string serverstr = GetIP();//获取IP地址
6 string loginname = user.Username;
7 string password = user.Password;
8 string portstr = "5001";
9 pro.FileName = pathstr; //获取或设置要启动的应用程序或文档
10 //pro.WorkingDirectory = "C:\\ActiveSoft\\ActiveMessenger"; //获取或设置要启动的进程的初始目录
11 pro.Arguments = "Server=" + serverstr + ";LoginName=" + loginname + ";Port=" + portstr + ";Password=" + password + ";EnType=1";
12 //pro.CreateNoWindow = false; //获取或设置指示是否在新窗口中启动该进程的值
13 pro.Verb = "open"; //获取或设置打开 FileName 属性指定的应用程序或文档时要使用的谓词
14 pro.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; //获取或设置启动进程时使用的窗口状态
15 //pro.UseShellExecute = true; //获取或设置一个值,该值指示是否使用操作系统外壳程序启动进程
16 Process.Start(pro);

到此为止我用VS2008运行程序,功能完全实现客户端正常登录成功没有任何问题。

再通过IIS,没有登录成功,但是在任务管理器里面却出现了这个exe文件的进程。于是从网上找资料(参考了这里的说法http://www.cnblogs.com/teddy/archive/2006/10/23/537658.html),进行了如下修改:

注意:在asp.net2.0中运行以上两种方法写的程序都可以得到想要的结果。但是在asp.net1.1或更早的版本却不能得到想要的结果,打开任务管理器甚至可以看到进程已经存在(编译器也没有报错),但就是看不到执行效果,这是微软为了安全原因禁掉了程序的运行,你需要做以下两步才能正常运行:
1、在桌面右键单击“我的电脑”,选择管理,展开“服务和应用程序”节点,选择“服务”项;从右侧的服务列表中找到“IIS Admin”项,右击鼠标,选择“属性”,在属性框中打开“登陆”页,勾选“本地系统帐户”下的“允许与桌面交互”项,点击确定。重新启动这项服务。
2、打开目录“C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG”中的machine.config文件,找到“processModel”项,原来这项中有一个属性是userName="machine",将machine改为“system”,保存文件,修改完毕。
现在再运行以前的程序可以看到期望的结果。
以上程序在IIS5.0中可正常运行。

修改完毕,IIS也实现了功能,也可以登录了。很是轻松啊,于是把网站程序发布到服务器上,再运行却发现没有任何反应,甚至任务管理器也没有出现这个exe文件的进程。

问题到此描述完毕,希望各位高手不吝赐教,如果我的这个实现方式不可以,请告知其它思路,将不胜感谢。

问题解决即可送分

问题补充: 问题已解决,感兴趣的园友请访问(http://space.cnblogs.com/question/13371/)。这也是我提出的问题,最后自己给摸索出来了。大侠们似乎不屑于回答这种问题啊。
今日的主页 今日 | 初学一级 | 园豆:10
提问于:2010-03-29 17:27
< >
分享
所有回答(4)
0

个人小声的说下,你描述的实现基本不可能完成,安全原因被禁止掉了。要是页面上也能直接执行可执行程序,那web的世界就完全乱了。你这要运行的话,那会需要浏览器的安全级别非常非常低,而且也不一定能运行成功...

比较靠谱的解决办法是使用ActiveX来做,用户客户端安装一个ActiveX控件,然后由他来启动你的程序。

西越泽 | 园豆:10775 (专家六级) | 2010-03-29 20:08
让大侠见笑了,可以把你提供的这个方法说的再具体吗,我着实不知道ActiveX是怎么一回事,谢谢了,如果有相应的示例源码和说明文档方便的话请发送至lijia_sky@163.com
支持(0) 反对(0) 今日 | 园豆:10 (初学一级) | 2010-03-30 09:54
@lijia2010:http://www.cnblogs.com/delphinet/archive/2010/03/17/1688265.html这里有篇文章做了介绍,你可以参考下看是否满足你...
支持(0) 反对(0) 西越泽 | 园豆:10775 (专家六级) | 2010-03-30 13:48
@卡索:O(∩_∩)O谢谢,学习中、、
支持(0) 反对(0) 今日 | 园豆:10 (初学一级) | 2010-04-01 11:15
0

你可以写个COM+放到服务器上,然后ASP.NET代码调用一下COM+,由COM+替你实现这个功能.

~洛书~ | 园豆:333 (菜鸟二级) | 2010-03-29 23:05
谢谢你的关注大侠,三位高手似乎提供了三种不同的解决方案,我觉着都比我直接在客户端通过IE启动EXE应用程序要可行,方便的话请进一步讲解一下这里提到的COM+,大家综合一下方案。 我在网上查资料的过程中看到过不少这方面的问题,至今也没有找到能够解决问题的可行方案。着实希望在这里终结这个问题,谢谢各位了。如果有相关源码示例和资料方便的话请发送至lijia_sky@163.com
支持(0) 反对(0) 今日 | 园豆:10 (初学一级) | 2010-03-30 10:11
0

正如卡索所言,楼主的目标是要在客户端通过IE启动应用程序,而不是在服务器上做设置。

关键是你不能确定是否获取客户pc的运行权限。

因此,可以考虑用AMsger.exe直接通过web service或.net Remoting\WCF等进行进程间通讯,不建议用网页形式。

邀月 | 园豆:25475 (高人七级) | 2010-03-30 08:58
你好专家,我觉着你和卡索大侠说的方法都可行。我确实对这方面知之甚少,像你说的web service或.net Remoting\WCF我也只是闻其名啊呵呵,如果有相应的示例源码和说明文档方便的话请发送至lijia_sky@163.com ,先谢谢各位关注了。
支持(0) 反对(0) 今日 | 园豆:10 (初学一级) | 2010-03-30 09:58
你好专家,我没太明白你的意思。我要实现的功能是这样,在客户端的电脑上安装AM即时通讯这个程序,安装完成以后在目录下就会有AMsger.exe这个文件,它就相当于QQ的那个登录窗口一样。而我的网站页面上会有一个按钮,点击这个按钮把当前用户的登录名和密码传给AMsger.exe这个文件,并且要运行这个文件,就像登录QQ一样完成登录。 如果我要用web service 来实现的话是不是要把运行AMsger.exe这个文件的方法写在web service 程序里面。然后再调用web service的这个方法。 我想请问一下把运行AMsger.exe这个文件的方法写在web service 程序里面,可以运行起来它吗?如果可以运行的话那用web service就能解决这个问题了。 劳烦回复,在线等候。
支持(0) 反对(0) 今日 | 园豆:10 (初学一级) | 2010-04-01 12:17
0

大哥,asp.net这种东西,到了客户端都是html乐,你写的代码都是在服务器端运行的,你怎么执行客户端的exe呢,

再说,如果可以运行,你知道有多可怕马,那我就写一个运行一下妮的format,你的硬盘是不是就挂了呢

Virus-BeautyCode | 园豆:1619 (小虾三级) | 2010-04-04 14:06
你好,问题解决了吗,我也同样遇到这样的问题,需求帮助
支持(0) 反对(0) chenhaixia | 园豆:174 (初学一级) | 2011-05-04 11:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册