执行命令C#Not Working

时间:2011-08-10 14:06:37

标签: c# asp.net command-line command

我有一个程序,我想要执行以下操作:

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

    我已经完成了第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文档将会打开,但命令不会运行(testDir文件夹中没有test

    建议?

2 个答案:

答案 0 :(得分:3)

见这里:

https://stackoverflow.com/search?q=+optimized+or+a+native+frame+is+on+top+of+the+call+stack

你不应该这样叫Response.End因为这会终止它。

答案 1 :(得分:2)

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

您当前的代码将使用默认的.txt文件开启工具打开.txt文件(因为您指定了procStart.UseShellExecute = true;)然后设置procStart.Arguments = "mkdir TestDir";但这实际上并没有帮助您,因为所有这一切都将发生的是"mkdir TestDir"将作为命令行参数传递给notepad.exe

你真正想要的是:

  1. 单独的ProcessStartInfo FileName设置为cmd.exe(并设置Arguments = "/C mkdir Test"
  2. 直接使用CreateDirectory()方法。
  3. 我更喜欢#2,因为它更清楚地显示了你想做的事情,但要么应该有效。

    更新:如果您需要使用选项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处理程序然后是网页;页面加载应该尽可能快。