100分,关于C# 运行命令行带参数应用程序的问题 急

时间:2021-04-05 14:32:33
 我有个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;

12 个解决方案

#1


天,完全不知道还可以这么用啊。。。。学习了,帮顶,等待高手解答~~

#2


 p.StartInfo.FileName = "cmd.exe"; //设定程序名

在我机器上OK

楼主多贴点代码看看

#3


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

#4



 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();//关闭流

#5


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

#6


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


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

#7


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

#8


程序的参数应该另外传递吧,尽量不要和命混在一起

#9


注意一下。

#10


学习帮顶!

#11


up

#12


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

#1


天,完全不知道还可以这么用啊。。。。学习了,帮顶,等待高手解答~~

#2


 p.StartInfo.FileName = "cmd.exe"; //设定程序名

在我机器上OK

楼主多贴点代码看看

#3


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

#4



 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();//关闭流

#5


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

#6


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


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

#7


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

#8


程序的参数应该另外传递吧,尽量不要和命混在一起

#9


注意一下。

#10


学习帮顶!

#11


up

#12


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