我有个test.exe的命令行应用程序带多参数,现在要在网站上运行。在CMD下运行: test.exe 2 10001 "d:/test" "d:/test.zip" 是可以执行的。
 我通过在网页上运行,确出现,use error! 错误提示,
 输出结果是Microsoft Windows [版本 5.2.3790] (C) 版权所有 1985-2003 Microsoft Corp. C:\>test.exe 3 10001 "d:\test" "d:\test.zip" use error! C:\>exit  但奇怪的是我把输出结果:test.exe 3 10001 "d:\test" "d:\test.zip" 到CMD运行又是可以运行的。
 
 我换个其它的应用程序如rar 是可以的。不知道问题在哪,郁闷两天了,望高人指点了。代码如下:       string ResultStr;
       Process p = new Process(); //实例一个Process类,启动一个独立进程
       p.StartInfo.FileName = cmd.exe; //设定程序名
       p.StartInfo.UseShellExecute = false; //关闭Shell的使用
       p.StartInfo.RedirectStandardInput = true; //重定向标准输入
       p.StartInfo.RedirectStandardOutput = true; //重定向标准输出
       p.StartInfo.RedirectStandardError = true; //重定向错误输出
       p.StartInfo.CreateNoWindow = true; // 设置不显示窗口
       p.StartInfo.ErrorDialog = false;
      p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
      p.Start();
      p.StandardInput.WriteLine(@"test.exe 3 10001 ""d:\test"" ""d:\test.zip""");
      // p.StandardInput.WriteLine(@"rar a ""d:\test.zip"" ""d:\test""");
      p.StandardInput.WriteLine("exit");
      ResultStr = p.StandardOutput.ReadToEnd();
      p.Close(); 
      return ResultStr;

解决方案 »

  1.   

     p.StartInfo.FileName = "cmd.exe"; //设定程序名在我机器上OK楼主多贴点代码看看
      

  2.   

    C#中运行命令行截取输出流的例子
    说明:经常有朋友问如何在C#中运行一个dos命令,并截取输出、输出流的问题,这个问题我以前在Java中实现过,由于在C#中没有遇到过类似的 情况,为了避免每次别人问都要一遍一遍演示的情况,特地做了一个简单的例子,实现在WinForm中ping一个网站,并且将ping的结果显示在一个文本框中。
      

  3.   


     tbResult.Text = "";
                ProcessStartInfo start = new ProcessStartInfo("Ping.exe");//设置运行的命令行文件问ping.exe文件,这个文件系统会自己找到
                //如果是其它exe文件,则有可能需要指定详细路径,如运行winRar.exe
                start.Arguments = txtCommand.Text;//设置命令参数
                start.CreateNoWindow = true;//不显示dos命令行窗口
                start.RedirectStandardOutput = true;//
                start.RedirectStandardInput = true;//
                start.UseShellExecute = false;//是否指定操作系统外壳进程启动程序
                Process p=Process.Start(start);
                StreamReader reader = p.StandardOutput;//截取输出流
                string line = reader.ReadLine();//每次读取一行
                while (!reader.EndOfStream)
                {
                    tbResult.AppendText(line+" ");
                    line = reader.ReadLine();
                }
                p.WaitForExit();//等待程序执行完退出进程
                p.Close();//关闭进程
                reader.Close();//关闭流
      

  4.   


    要注意一些问题:
    你的“test.exe”最好写全路径,因为在命令行下运行和在网站中运行路径是有差别的。
    希望你做的不是需要很高权限才能进行的操作,因为ASP.NET默认是较低的权限运行的(防治权限过高操作危害服务器)。
      

  5.   


    test.exe 已经设置环境变量,可能是权限问题,我的代码运行其它程序如(winrar.exe,ping.exe..)都是没问题的,但是执行自己写的Test.exe应用程序就提示use error !
    如果是权限问题,我在WEB.config,已添加管理员的权限了问题依旧<identity impersonate="true" userName="administrator" password="112233" />
      

  6.   

    你換個角度想就知道了,到底是誰在運行這段代碼?
    你直接在cmd上運行時,可以執行,此時你是什么身份登錄?
    而IIS在運行時,其執行帳號絕對不是你自己的帳號,而是ASP.NET Machine Account (ASPNET)
    而這個用戶是隸屬與User這個群的..
      

  7.   

    谢谢各位,经再三测试确认存在权限问题,和以上程序无关国。 我在.net里直接运行,是可以的,但发布到IIS就存在以上的问题了。