我有个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;
我通过在网页上运行,确出现,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;
解决方案 »
- 服务里访问不了自己注册的映射盘
- 继承、静态问题
- UltraWebGrid 中CheckBox单选问题
- 如何将一个路径下的东西用treeview显示 并可以实时更新!急,急,大虾帮忙
- 开发一个类似于PPS的网络点播软件中播放的控件用什么
- vs2005 创建 C/S项目的问题
- 是否是权限引起的访问其他机器的共享目录的问题?
- 悬赏100分解决10道简单的C语言题目。(解决立即给分,绝不食言)
- 为什么在win2k中运行正常,在win98中在出错
- A窗体中新建B窗体,B中再新建C窗体, C窗中有一个BUTTON按一下如何使A窗体的一个LABEL的TEXT=“某值“
- ClickOne安装好的程序启动时验证是否为最新程序的验证执行文件是哪个?具体路径?
- MVC架构模式里如何实现多线程呢?或者需要注意些什么?
说明:经常有朋友问如何在C#中运行一个dos命令,并截取输出、输出流的问题,这个问题我以前在Java中实现过,由于在C#中没有遇到过类似的 情况,为了避免每次别人问都要一遍一遍演示的情况,特地做了一个简单的例子,实现在WinForm中ping一个网站,并且将ping的结果显示在一个文本框中。
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();//关闭流
要注意一些问题:
你的“test.exe”最好写全路径,因为在命令行下运行和在网站中运行路径是有差别的。
希望你做的不是需要很高权限才能进行的操作,因为ASP.NET默认是较低的权限运行的(防治权限过高操作危害服务器)。
test.exe 已经设置环境变量,可能是权限问题,我的代码运行其它程序如(winrar.exe,ping.exe..)都是没问题的,但是执行自己写的Test.exe应用程序就提示use error !
如果是权限问题,我在WEB.config,已添加管理员的权限了问题依旧<identity impersonate="true" userName="administrator" password="112233" />
你直接在cmd上運行時,可以執行,此時你是什么身份登錄?
而IIS在運行時,其執行帳號絕對不是你自己的帳號,而是ASP.NET Machine Account (ASPNET)
而這個用戶是隸屬與User這個群的..