2011-08-10 87 views
3

我有一个程序,我要做到以下几点:执行命令C#不工作

  1. 获取文件上(型号未知)
  2. 文件保存在本地
  3. 执行一些指令(未知)文件

我有步骤1和2的照顾,但我挣扎在第3步中我使用下面的代码:

注:文件类型和命令只是用于测试

//Redirects output 
procStart.RedirectStandardOutput = false; 
procStart.UseShellExecute = true; 
procStart.FileName = "C:\\Users\\Me\\Desktop\\Test\\System_Instructions.txt"; 
procStart.Arguments = "mkdir TestDir"; 

//No black window 
procStart.CreateNoWindow = true; 

Process.Start(procStart); 

.txt文件将打开,但该命令将不会运行(会出现在test文件夹中没有testDir

建议?

+0

你从哪里得到这个错误?这绝对是源自编译的代码行的异常,而不是在直接窗口中输入的语句? – Justin

+0

我与Kragen就这一问题达成了共识:那个错误通常意味着你已经在当地人或观看窗口中观看了某些东西,或者通过直接窗口检查了一个表情。我假设你这样做是因为代码不工作,但我不认为这个错误信息是你的实际问题。 – dlev

+0

@Keragan - 当我在调试器中运行程序时,出现'Response.End()'行错误,我删除了像@Davide这样的行,提示我没有收到任何错误,但是目录没有创建 –

回答

2

我认为问题在于您的Process设置不正确。

您当前的代码将使用默认的.txt文件的揭幕战(因为你指定procStart.UseShellExecute = true;),那么您可以设置procStart.Arguments = "mkdir TestDir";但是,这并不是真正会帮助你,因为这一切会发生是"mkdir TestDir"会被传递打开.txt文件命令行参数为notepad.exe

你真正想要的是两种:

  1. 单独ProcessStartInfo设置为cmd.exeFileName(并设置Arguments = "/C mkdir Test"
  2. 直接使用的CreateDirectory()方法。

我宁愿#2,因为它更清楚地表明你想要做什么,但是要么应该工作。

UPDATE:如果您需要使用选项1,那么你应该使用下面的代码,看看有什么地方出了错:

Process userCommandProc = Process.Start(procStart); 
userCommandProc.WaitForExit(); 

if (userCommandProc.ExitCode != 0) 
{ 
    // Something has (very likely) gone wrong 
} 
else 
{ 
    // Most likely working 
} 

一对夫妇的其他注意事项:

  1. 这个过程会在服务器上运行,而不是在客户端计算机上运行。如果你需要后者,如果你想使用一个网络应用程序,你运气不好。
  2. 这种处理可能更好的是留在标准的.ashx处理程序,然后是网页;页面加载应该尽可能快。
+0

我想要做的第一件事是你提到的(因为我不知道该命令将会怎样,我已经编辑了下面的代码:ProcessStartInfo procStart = new ProcessStartInfo() ; procStart.RedirectStandardOutput = false; procStart.FileName =“cmd.exe”; procStart.Arguments =“/ C mkdir TestDir”; procStart.CreateNoWindow = true; Process.Start(procStart);'但目录仍然没有创建 –

+0

@Peppered我已经更新了一些更多信息的答案 – dlev

+0

感谢您的帮助,我运行了您添加的代码,并且得到了'1'的ExitCode,所以代码有问题,我将不得不做一些更多的研究,看看发生了什么问题 –