打开命令提示符并执行命令

时间:2015-06-14 00:35:43

标签: c# cmd

首先,这是我的第一个程序,我对HTML和一些JS之外的整体编程非常陌生。话虽这么说,我正在构建一个收集和收集系统文件的应用程序,用于故障排除。我对我到目前为止所做的工作有一个基本的了解,我只是遇到了dxdiag参数的问题:

    var process = new Process();
    var startInfo = new ProcessStartInfo();
    // startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    startInfo.FileName = "cmd.exe";
    startInfo.Arguments = @"/c dxdiag /whql:on /t %UserProfile%\Desktop\My System Files\dxdiag.txt";
    process.StartInfo = startInfo;
    process.Start();
    process.WaitForExit();

*为了澄清,我注释掉了隐藏的行,以便在构建应用程序时可以看到CMD窗口正在做什么。

现在我已经查了一下,发现了多个与类似代码的使用有关的其他线程,但无法弄清楚为什么我的变体不能使用我所包含的参数。这是我提出CMD并执行dxdiag命令的块。我已经多次在CMD中测试了命令本身,以确保它可以正常工作。我的问题是,上面的参数不会在启动的CMD提示中执行。我将包含下面的完整代码块以提供更多上下文,因为我将使用msinfo32导出。它也没有执行命令(这里没有预料到不同的结果)。

    using System;
    using System.IO;
    using System.Diagnostics;
    namespace System_File_Collection_App
    {
        class Program
        {
            public static void Main(string[] args)
            {
        // DXDIAG Output
        var process = new Process();
        var startInfo = new ProcessStartInfo();
        //startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = @"/c dxdiag /whql:on /t %UserProfile%\Desktop\My System Files\dxdiag.txt";
        process.StartInfo = startInfo;
        process.Start();
        process.WaitForExit();

        // MSINFO32 Output
        var process = new Process();
        var startInfo = new ProcessStartInfo();
        //startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = @"/c msinfo32 /nfo %UserProfile%\Desktop\My System Files\";
        process.StartInfo = startInfo;
        process.Start();
        process.WaitForExit();
            }
        }

    }

当我复制它时,缩进部分搞砸了但是一切都结束了,我能够运行程序。

编辑:删除dxdiag参数并在代码中使用dxdiag完全正常。我用它作为测试点来确保命令实际启动。我只是不太明白为什么不使用辅助参数。

不起作用:

    startInfo.Arguments = @"/c dxdiag" + "/whql:on" + "/t \"%UserProfile%\\Desktop\\dxdiag.txt\"";

使用:

    startInfo.Arguments = @"/c dxdiag";

1 个答案:

答案 0 :(得分:0)

你可能忘记了参数之间的空格,因为这个工作正常:

startInfo.Arguments = @"/c dxdiag /whql:on /t %userprofile%\Desktop\Examples\New folder\myinfo.txt"

请注意,文件夹的路径必须存在,否则无法正常工作。