xp/net 1.1/服务器端执行
process.start("c:\\windows\\notepad.exe")
控制台程序可成功调用出Notepad;但在asp.net中调用却发现问题,
process.start的返回值为true,在任务管理器的进程中也发现Notepad.exe,可就是没执行(此处即Notepad没显示)网上找了一下,类似情况,大多人提到是安全与权限问题也有人建议对 IIS Admin 重新设定,并对machine.config进行修改,如下:
http://liu765023051.blog.163.com/blog/static/132912267201261785452133/
但结果无效有谁知道问题在哪?若是权限问题,该如何设置?

解决方案 »

  1.   

    可以运行,但是你在桌面看不到,要明确两点,一个是asp.net是在系统账户,而不是你桌面登录的账户运行程序的,所以看不到界面,另一个是,你用process.start事实上是在服务器上运行(可能你调试的时候客户端、服务器是一台电脑,但是实际运行不是),也就是你不能用任何办法去执行客户机上的程序。
      

  2.   

    在服务器上运行Notepad干什么?
      

  3.   


    这个是正解。
    在web服务端执行process.start("c:\\windows\\notepad.exe")你是不可能看到界面的。
    windows是多用户的系统,你当前用户无法看到其他用户启动的进程(IIS使用的用户和你登录电脑的用户不一样)如果你想实现,打开你的网页,打开一个记事本的话,需要使用脚本语言来实现。在服务端打开是没有用的。
    例如:<script language="javascript" type="text/javascript">
          var myshell = new ActiveXObject( "WScript.shell" );
          myshell.Run('notepad');      
    </script>
      

  4.   

    补充说明一下:To devmiao
    是否能看到界面并不重要,在被调用的exe程序中有记录操作日志,因为没有获得其日志文件,所以才确定程序被调用了,但没有被执行。To wuyq11
    >修改应用程序池,设置属性-标识为本地系统
    测试用的环境是XP,真实现场环境将为Win7;
    因为目前还在xp环境下测试,所以尚不能确定此法是否有效;等部署到真实环境后再追加确认。To findcaiyzh
    抱歉,举的例子不太好,实际上,Notepad.exe只是代指一个exe程序,不是真要打开一个记事本程序。To haukwong
    被调用的exe程序是存放在服务器端的
      

  5.   

    这肯定是权限问题了。
    我试了一下,只要一发布到IIS,就会报异常。System.ComponentModel.Win32Exception: 拒绝访问。我是用的win7 x64,给文件设置了Everyone完全控制,并共享都不行。
    正确的做法是:
    1、打开IIS管理界面
    2、选择“应用程序池”
    3、选择你发布网站所用的“应用程序池”-->右键(高级设置)
    4、进程模型节点-->标识-->设置-->自定义帐户-->输入一个个人用户的帐号和密码
    5、一路确定-->OK当然你也可以单独创建一个新的应用程序池来做如上设置
      

  6.   

    haukwong,等正式部署到时,我会按你的方法尝试的,谢谢。WinXP下,我目前找到的方法是,把网站的执行权限,由"纯脚本",调整到"脚本与可执行文件",这样可以达到目的,只是这样安全性方面可能会有些问题。