问题是这样的:
环境:windows xp + ASP.Net + C#
我想在客户端调用服务器端的一个执行程序,该执行程序有两个参数,执行后会生成一个结果文件然后自动退出该执行程序
调用执行程序的代码如下:
     string par2 = -x";
         string par3 = "InFile.Dat"; 
         System.Diagnostics.ProcessStartInfo Info = new          System.Diagnostics.ProcessStartInfo();
         Info.FileName = "GOTO.exe";
         Info.WorkingDirectory = "\\F:\\GOTO"; 
         Info.Arguments = String.Format("\"{0}\"   \"{1}\"", par2, par3);         Info.CreateNoWindow = false; 
         Info.Verb = "open";
         Info.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
         Info.UseShellExecute = true;
         System.Diagnostics.Process.Start(Info);在C#环境下运行,能顺利调用这个执行程序并生成结果文件并自动退出
(http://localhost:21863POST http://forum.csdn.net/PointForum/Forum/PostT��如果在浏览器(IE)上用http://127.11.11.11/Sur_Main.aspx运行时(127.11.11.11代表服务器地址),调用了这个执行文件(可以在服务器的任务管理器上看到进程GOTO.exe),但是没有生成结果文件,也不自动退出.这是为什么呢?请各位大虾不吝赐教!

解决方案 »

  1.   

    運行service.msc,選擇IIS Admin Service服務,設置允許該服務與桌面交互即可
      

  2.   

     if (process != null)
                    {
                        process.Kill();
                    }
                    process = System.Diagnostics.Process.Start("GOTO.exe");
                    System.Threading.Thread.Sleep(3000);//等3秒钟,让无界起来
      

  3.   

    应该是权限的问题,你的。net用户没有运行可执行文件的权限。
    你可以尝试把程序的权限加大,做一下测试~~~
      

  4.   

    To boblaw: 对IIS Admin  Service服务设置"允许服务与桌面交互"后还是不行,没有生成结果文件
    To liuyun1987 : 你的方法试了也不行
      

  5.   

    To: yearnwar
    是把Net用户权限加大还是把程序的权限加大?可以说详细一点吗?
      

  6.   

    to lz
    是把程序的权限加大。
    现在也不确认是什么问题。
    感觉还是问题还是在权限那里,让你把程序加大,然后测试一下。
      

  7.   

    To yearnwar
    我把执行程序(GOTO.exe)所在的目录加了一个"web共享"并加上了"执行(包括脚本)",但是问题还是一样.你所说的"把程序权限加大"是不是这样加呀?
      

  8.   

    Sur_Main.aspx在虚拟目录下,执行文件是在"\\F:\\GOTO"目录下,它不是虚拟目录,我把"\\F:\\GOTO"目录在"共享与安全"里加了一个"web共享"并加上了"执行(包括脚本)",是不是这样啊?
      

  9.   

    C#生成的页面Sur_Main.aspx在虚拟目录下,它所要调用的执行文件"GOTO.exe"是在 "\\F:\\GOTO"目录下,它不是在虚拟目录下,生成的结果文件是要放在虚拟目录下,虚拟目录我是加入了写入权限的但是没用
    你说的把程序的权限加大,我没明白是什么意思,是把哪个程序的权限加大?是"要调用的可执行程序GOTO.exe"吗?我不知道如何做
    我是把 要调用的可执行文件所在的目录"\\F:\\GOTO "目录在"共享与安全"里加了一个"web共享"并加上了"执行(包括脚本)"
      

  10.   

    这个应该生成在你的虚拟路径下吧?你得如果不是在虚拟路径下,应该是程成不了的。Info.WorkingDirectory   =   "\\F:\\GOTO "; 换成你的虚拟路径下的某个路径,就有生成文件的权限。不然应该没权限,我是这么认为的.lz可以试试。
      

  11.   

    把asp.net用戶權限設置為administrator試一下,如果OK的話,就是權限問題,當然衹是測試,實際使用中不可以把administrator權限設給asp.net
      

  12.   

    TO lye2000000_super:
    你的意思是说:所要调用的执行程序必须放在虚拟目录下吗?生成的结果文件也必须放在同一个虚拟目录下吗?
    To boblaw:
    我看了一下,在服务器的任务管理器->进程中,当在C#环境中运行时执行程序GOTO.exe所对应的用户是administrator,当在客户端浏览器中调用时执行程序GOTO.exe所对应的用户是AspNet
    也许你说的对,我要再试试多谢楼上各位!
      

  13.   

    TO 黑马王子(经典,由我制造)
    我把asp.net用户加到Administrators组,可是问题还是一样,只能在任务管理器中的进程看到所调用的执行程序GOTO.exe,没有生成结果文件.
    To 我自横刀香甜笑:
    结果文件是生成在虚拟路径下,该路径有写入权限
    究竟是哪儿出了问题了?我都无计可施了! 请各位大虾再指点指点
      

  14.   

    IIS的虚目录默认的执行权限是有限的。你需要为你的虚目录建立一个Application,然后指定一个足够大的用户权限,这样Asp调用用你的exe时才有足够的权限执行具体你可以查查IIS虚目录权限设置的相关信息。
      

  15.   

    是啊,很辛苦的,有点做不下去了
    多谢楼上两位(conannb、Dionix),小妹我再试试
      

  16.   

    权限的问题的可能性最大。
    但解决权限问题,xp与win2000或win2003等服务器版不一样。
    首先,你要解决xp权限管理的模式,取消xp的简单共享,这样你就能为你的文件夹或虚拟目录设置详细的权限。
    方法:在文件夹选项中\查看\使用简单共享(推荐)的钩去掉,你再查看文件夹属性时,就多了一个安全选项卡了,,这里你就可以对文件上夹的权限进行详细的设置了。
    在IIS中的权限设置方法也同默认时不一样了,winxp默认情况下IIs设置权限只有几个简单的选项,取消简单共享后,其设置方法与服务器版操作系统类似。
    注意,让用户System权限设为完全控制。
    在试验时也可以让用户EveryOne完全控制。
      

  17.   

    多谢jinggangshi! 我试试你的方法
      

  18.   

    To jinggangshi:
       在客户端通过浏览器调用我的页面时,在服务器的任务管理器->进程中可以看到被调用的执行程序
        这说明了什么问题呢?
      

  19.   

    说明程序已经被调用,因权限或程序有错误而被挂起。
    主要原因是权限问题。
    你最好服务器操作系统用服务器版,一来服务器版可以详细设置权限,并能进一步设置服务功能扩展,二来你做的系统总是要放到服务器上的,你在Xp上调试好了的,到服务器上可不一定行。
    我原来用.Net2003/J#+SQL+Xp,调试好的东西在Win2003上就是出错。
    还有,在.Net目录在应该有个临时目录的权限也要加上去,否则出错,注意可能有.net的调试程序进程被挂起,中止它,并删除临时目录中的文件。(在.net的安装目录下找,好象叫Template,你自己找找)。
      

  20.   

    To   jinggangshi:   
    我按你说的做了,页面、被调用的执行程序、结果文件都放在同一个虚拟目录下,对该目录把   INTERNET   来宾账户   及   ASPNET账户的权限都设置的足够大(只除了没有最后一个特别的权限),还有这两个账户我都把它加到了Administrators组,     
    你说的.Net临时目录是这个吧:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET 
    Files\temp,对该目录把   INTERNET   来宾账户   及   ASPNET账户的权限都设置的足够大 
    但还是不行啊  
    哎,我都快做不下去了,兄弟,救救我吧
      

  21.   

    System这个帐户的权限加了没有,你还是试试加上EveryOne这个用户的权限到最高试试。
    要加虚拟目录的。
      

  22.   

    To jinggangshi:
    谢谢!system权限加了,everyone没加到最高,我再试试
    WebService我没考虑过,我会试一下
      

  23.   

    你需要把你的虚拟目录的设为独立的进程(应用程序保护:选择高),然后到管理工具里运行组件服务,计算机-我的电脑-COM+运行程序,里面可以看到一个IIS-{虚目录路径}节点,右键 属性 ,然后在这个里面给这个独立的进程指定一个权限足够高的用户账户,作为进程的执行账号,这样应该就可以了
      

  24.   

    To shawn_yang:
    终于把你等来了,不能说没帮上忙,有你的思路及热心我已很感谢!再次感谢楼上各位的热心相助!如果各位想看最后的解决方案,请去看贴子http://topic.csdn.net/u/20071105/11/3aa1faa1-7266-440b-8ebb-2fde3029ea0a.html