Process.StartInfo.UseShellExecute=false;后系统找不到指定文件

傲世孤风 2016-03-11 09:26:33
网页上放一个按钮,点击按钮后要打开C盘下的某个批处理文件,打开后如图所示,要输入ru-standard这个命令,回车后再输入下一条命令,现在的问题是,如果我把
Process.StartInfo.UseShellExecute=false;
这一行代码去除后,可以打开文件出现如图所示的cmd窗口,因为我要输入命令,所以我得添加
Process.StartInfo.UseShellExecute=false;
p.StandardInput.WriteLine( "ru-standard");
代码,但是一旦我添加了这行代码,调试运行后会提示系统找不到文件。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.IO;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
string targetDir = string.Format(@"C:\MSC.Software\Adams\2013\common");
Process p = new Process(); // 初始化新的进程
p.StartInfo.WorkingDirectory = targetDir;
p.StartInfo.FileName = "mdi.bat";
p.StartInfo.RedirectStandardInput = true; //重定向输入
p.StartInfo.UseShellExecute = false; // 不调用系统的Shell
p.StartInfo.RedirectStandardError = true; // 重定向Error
p.Start(); // 启动进程
p.StandardInput.WriteLine( "ru-standard");
p.WaitForExit(); // 等待退出
}
}
...全文
656 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
socg 2016-03-12
  • 打赏
  • 举报
回复
很明显是默认路径改变了,你换成绝对路径
qbilbo 2016-03-12
  • 打赏
  • 举报
回复
先确保在本地调用时是正常的,然后改为使用参数调用。如:mdi.bat ru-standard这样。 bat也是支持参数的,看看那里面有没有对参数的支持,没有的话,自己改下就是了。 在bat文件中:%1,%2,....表示的就是第一,第二,...个参数。
傲世孤风 2016-03-12
  • 打赏
  • 举报
回复
引用 4 楼 socg 的回复:
很明显是默认路径改变了,你换成绝对路径
我这C:\MSC.Software\Adams\2013\common就是绝对路径
傲世孤风 2016-03-12
  • 打赏
  • 举报
回复
引用 3 楼 Icedmilk 的回复:
如果没有shell,那么你就要用cmd.exe去运行bat
        static void Main(string[] args)
{
string targetDir = string.Format(@"D:\Test");
Process p = new Process(); // 初始化新的进程
p.StartInfo.WorkingDirectory = targetDir;
p.StartInfo.FileName = @"cmd.exe";
p.StartInfo.Arguments = @"/k D:\Test\run.bat";
p.StartInfo.RedirectStandardInput = true; //重定向输入
p.StartInfo.UseShellExecute = false; // 不调用系统的Shell
p.StartInfo.RedirectStandardError = true; // 重定向Error
p.Start(); // 启动进程
p.StandardInput.WriteLine("dir");
p.WaitForExit(); // 等待退出

}

你说的方法我试了,到是可以打开cmd窗口,可是打开了什么也没有啊,没有出来该显示的东西,你看窗口上面还写着打开了目录下的mdi.bat可是没有运行啊。正常的显示内容楼上我上传了一张
傲世孤风 2016-03-12
  • 打赏
  • 举报
回复
引用 1 楼 johnliuyuan 的回复:
ru-standard 这个命令需要什么文件吗?还是没有加到Path里,或者mdi.bat找不到,把目录改成@"C:\MSC.Software\Adams\2013\common\"试试


就是这个图,这是第一条命令,不需要文件,输入之后按回车后下一条命令才输入文件名。按你说的改了目录还是没有解决
傲世孤风 2016-03-12
  • 打赏
  • 举报
回复
引用 10 楼 xuzuning 的回复:
p.StartInfo.FileName = "mdi.bat"; 这个要全路径!即: p.StartInfo.FileName = targetDir + @"\mdi.bat";
我试过了,不是全路径也是可以的。这个问题我已经解决了,使用系统shell,然后用StartInfo.Arguments带命令进去就可以实现我想要的结果。不过还是要谢谢你的回答
socg 2016-03-12
  • 打赏
  • 举报
回复
你试着在页面打开命令行里dir试试,能不能找到文件
xuzuning 2016-03-12
  • 打赏
  • 举报
回复 1
p.StartInfo.FileName = "mdi.bat"; 这个要全路径!即: p.StartInfo.FileName = targetDir + @"\mdi.bat";
Icedmilk 2016-03-12
  • 打赏
  • 举报
回复
引用 6 楼 u013568358 的回复:
[quote=引用 3 楼 Icedmilk 的回复:] 如果没有shell,那么你就要用cmd.exe去运行bat
        static void Main(string[] args)
        {
            string targetDir = string.Format(@"D:\Test");
            Process p = new Process();  // 初始化新的进程
            p.StartInfo.WorkingDirectory = targetDir;
            p.StartInfo.FileName = @"cmd.exe";
            p.StartInfo.Arguments = @"/k D:\Test\run.bat";
            p.StartInfo.RedirectStandardInput = true; //重定向输入
            p.StartInfo.UseShellExecute = false; // 不调用系统的Shell
            p.StartInfo.RedirectStandardError = true; // 重定向Error
            p.Start(); // 启动进程
            p.StandardInput.WriteLine("dir");
            p.WaitForExit();  // 等待退出

        }
你说的方法我试了,到是可以打开cmd窗口,可是打开了什么也没有啊,没有出来该显示的东西,你看窗口上面还写着打开了目录下的mdi.bat可是没有运行啊。正常的显示内容楼上我上传了一张 [/quote] 你可以看你图片里窗口标题,已经显示mdi.bat已经在运行了,你可以修改这个mdi.bat在它刚启动的时候,用echo输出一些东西,我觉得这个mdi.bat可能把回显关了吧
Icedmilk 2016-03-11
  • 打赏
  • 举报
回复
如果没有shell,那么你就要用cmd.exe去运行bat
        static void Main(string[] args)
        {
            string targetDir = string.Format(@"D:\Test");
            Process p = new Process();  // 初始化新的进程
            p.StartInfo.WorkingDirectory = targetDir;
            p.StartInfo.FileName = @"cmd.exe";
            p.StartInfo.Arguments = @"/k D:\Test\run.bat";
            p.StartInfo.RedirectStandardInput = true; //重定向输入
            p.StartInfo.UseShellExecute = false; // 不调用系统的Shell
            p.StartInfo.RedirectStandardError = true; // 重定向Error
            p.Start(); // 启动进程
            p.StandardInput.WriteLine("dir");
            p.WaitForExit();  // 等待退出

        }
Poopaye 2016-03-11
  • 打赏
  • 举报
回复
网页上的按钮怎么能运行本地命令?
john_QQ:2335298917 2016-03-11
  • 打赏
  • 举报
回复
ru-standard 这个命令需要什么文件吗?还是没有加到Path里,或者mdi.bat找不到,把目录改成@"C:\MSC.Software\Adams\2013\common\"试试

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧