在 windows 应用程序中执行的命令提示符命令

command prompt commands executing in windows application

我正在尝试 windows 应用程序,我需要 运行 另一个应用程序 tetpdflib。 tetpdflib 运行s 仅在命令提示符下。当我将 exe 拖放到命令提示符时,它将执行。为此,我遵循了一些编码

            Process tetmlProcess = new Process();
            tetmlProcess.StartInfo.CreateNoWindow = true;
            tetmlProcess.StartInfo.RedirectStandardOutput = true;
            tetmlProcess.StartInfo.UseShellExecute = false;
            tetmlProcess.StartInfo.FileName = @"cmd.exe";
            tetmlProcess.StartInfo.Arguments = "cd C:\Users\sw_chn\Documents\PDFlib\TET 5.0 32-bit\bin\tet.exe";

            tetmlProcess.Start();

但我无法获得输出.. 而且我还需要 运行 遵循命令提示符行

cd tet.exe and tet -m filename

如何在该进程中执行这些命令。

这就是完整的编码

    public static string inputfile = string.Empty;
    public static string outputfolder = string.Empty;

    private void btninputbrowse_Click(object sender, RoutedEventArgs e)
    {
        OpenFileDialog inputFileBrowser = new OpenFileDialog();
        DialogResult result = inputFileBrowser.ShowDialog();
        if (result == System.Windows.Forms.DialogResult.OK)
        {
            inputfile = inputFileBrowser.FileName;
            txtinput.Text = inputFileBrowser.FileName;
        }
    }

    private void btnoutputbrowse_Click(object sender, RoutedEventArgs e)
    {
        FolderBrowserDialog folderbrowsing = new FolderBrowserDialog();
        DialogResult result = folderbrowsing.ShowDialog();
        if (result == System.Windows.Forms.DialogResult.OK)
        {
            outputfolder = folderbrowsing.SelectedPath;
            txtoutput.Text = folderbrowsing.SelectedPath;
        }
    }

    private void btnok_Click(object sender, RoutedEventArgs e)
    {
        MoveInputFileToOutPutFolder();
    }

    private void MoveInputFileToOutPutFolder()
    {
        try
        {
            string[] splitinput = inputfile.Split('\');
            outputfolder = System.IO.Path.Combine(outputfolder,splitinput.LastOrDefault());
            if (File.Exists(outputfolder))
            {
                File.Delete(outputfolder);
            }
            File.Copy(inputfile,outputfolder);
            TetmlApplicationRunning();
        }
        catch (Exception)
        {

            throw;
        }
    }

    private void TetmlApplicationRunning()
    {
        try
        {
            Process tetmlProcess = new Process();
            //tetmlProcess.StartInfo.CreateNoWindow = true;
            //tetmlProcess.StartInfo.RedirectStandardOutput = true;
            //tetmlProcess.StartInfo.UseShellExecute = false;
            tetmlProcess.StartInfo.FileName = @"C:\Users\sw_chn\Documents\PDFlib\TET 5.0 32-bit\bin\tet.exe";
            tetmlProcess.StartInfo.WorkingDirectory = @"C:\Users\sw_chn\Documents\PDFlib\TET 5.0 32-bit\bin";
            tetmlProcess.StartInfo.Arguments = "tetml -m wordplus" + inputfile;
            tetmlProcess.Start();
        }
        catch (Exception)
        {

            throw;
        }
    }
}

}

你可以像下面那样做。你不需要 运行 cmd.exe 你可以直接 运行 tet.ext。在代码中添加了注释。

Process tetmlProcess = new Process();
tetmlProcess.StartInfo.CreateNoWindow = true;
tetmlProcess.StartInfo.RedirectStandardOutput = true;
tetmlProcess.StartInfo.UseShellExecute = false;
// Instead of cmd.exe you run the tet.exe
tetmlProcess.StartInfo.FileName = @"C:\Users\sw_chn\Documents\PDFlib\TET 5.0 32-bit\bin\tet.exe";
//Set The working directory to C:\Users\sw_chn\Documents\PDFlib\TET 5.0 32-bit\bin\ if needed
tetmlProcess.StartInfo.WorkingDirectory = @"C:\Users\sw_chn\Documents\PDFlib\TET 5.0 32-bit\bin";
//Use the arguments required for tet.exe
tetmlProcess.StartInfo.Arguments = "-m filename";

tetmlProcess.Start();

注意:此代码是直接在此处键入的(现在无法访问 visual studio),因此可能包含语法错误。仅将此视为指南。

试试下面的代码片段:

        var proc = new ProcessStartInfo();
        string yourCommand;
        yourCommand = "calc.exe";
        proc.UseShellExecute = true;
        proc.WorkingDirectory = @"C:\Windows\System32";
        proc.FileName = @"C:\Windows\System32\cmd.exe";
        proc.Arguments = "/c " + yourCommand;
        proc.WindowStyle = ProcessWindowStyle.Normal;
        Process.Start(proc);

我运行计算器;您可以 运行 您的程序 tet.exe 并且您必须根据您的 .exe 文件设置其他参数,例如 WorkingDirectory 和 FileName。 这行代码 proc.WindowStyle = ProcessWindowStyle.Normal; 显示 cmd.exe window。如果您不想显示它,请将提到的代码行更改为 proc.WindowStyle = ProcessWindowStyle.Hidden; 希望成功!

我不会尝试模拟命令提示符,而是直接执行应用程序。我假设此应用程序的输出已发送到控制台。您可以重定向此输出,但无法将其与 shell 执行结合使用。我使用应用程序的完整路径名,我在 "Options" class 中设置并存储在注册表中。一个例子:

    static public String CompileScript(String InputFile, String OutputFile)
        {
        Process Compiler = new Process();
        String Result = String.Empty;
        try
            {
            Compiler.StartInfo.FileName = CLuaCreatorOptions.TrainSimulatorDirectory + "\luac.exe";
            Compiler.StartInfo.Arguments = "-v -o " + OutputFile + " " + InputFile;
            Compiler.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            Compiler.StartInfo.CreateNoWindow = true;
            Compiler.StartInfo.UseShellExecute = false;
            Compiler.StartInfo.RedirectStandardOutput = true;
            Compiler.StartInfo.RedirectStandardError = true;
            Compiler.Start();
            Result = Compiler.StandardOutput.ReadToEnd() + "\n" + Compiler.StandardError.ReadToEnd();
            Compiler.WaitForExit();
            }
        catch (Exception e)
            {
            return "Error compiling script " + e.Message + "\r\n" + Result;
            }
        return Result;
        }

此示例 运行 将 LUA 编译器和 returns 所有错误消息(异步)转换为字符串 "Result"。我在调用此编译器的表单应用程序中的多行文本框中显示此字符串。

这三行可以帮助您重定向输出。

        Compiler.StartInfo.UseShellExecute = false;
        Compiler.StartInfo.RedirectStandardOutput = true;
        Compiler.StartInfo.RedirectStandardError = true;

要实际获取信息,您需要运行 应用程序并获取输出。您需要等到应用程序退出才能获得完整的结果,最后三行会为您完成:

        Compiler.Start();
        Result = Compiler.StandardOutput.ReadToEnd() + "\n" + Compiler.StandardError.ReadToEnd();
        Compiler.WaitForExit();

最后,您可能希望抑制命令 window 可见。此代码将为您执行此操作:

        Compiler.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        Compiler.StartInfo.CreateNoWindow = true;