具体功能描述如下:
点击网站页面上的按钮,执行本地的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文件的进程。
问题到此描述完毕,希望各位高手不吝赐教,如果我的这个实现方式不可以,请告知其它思路,将不胜感谢。
问题解决即可送分。
个人小声的说下,你描述的实现基本不可能完成,安全原因被禁止掉了。要是页面上也能直接执行可执行程序,那web的世界就完全乱了。你这要运行的话,那会需要浏览器的安全级别非常非常低,而且也不一定能运行成功...
比较靠谱的解决办法是使用ActiveX来做,用户客户端安装一个ActiveX控件,然后由他来启动你的程序。
你可以写个COM+放到服务器上,然后ASP.NET代码调用一下COM+,由COM+替你实现这个功能.
正如卡索所言,楼主的目标是要在客户端通过IE启动应用程序,而不是在服务器上做设置。
关键是你不能确定是否获取客户pc的运行权限。
因此,可以考虑用AMsger.exe直接通过web service或.net Remoting\WCF等进行进程间通讯,不建议用网页形式。
大哥,asp.net这种东西,到了客户端都是html乐,你写的代码都是在服务器端运行的,你怎么执行客户端的exe呢,
再说,如果可以运行,你知道有多可怕马,那我就写一个运行一下妮的format,你的硬盘是不是就挂了呢