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

时间:2017-03-08 04:10:08

标签: c# process windows-applications

我在Windows应用程序中尝试我需要运行另一个应用程序的tetpdflib。 tetpdflib仅在命令提示符下运行。当我将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   和tet -m文件名

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

这就是完整的编码

    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;
        }
    }
}

}

3 个答案:

答案 0 :(得分:0)

你可以像下面这样做。您无需运行java即可直接运行cmd.exe。在代码中添加了注释。

tet.ext

注意:此代码直接输入此处(现在无法访问visual studio),因此可能包含语法错误。仅作为指导对待。

答案 1 :(得分:0)

尝试以下代码段:

        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窗口。如果您不想显示,请将提到的代码行更改为proc.WindowStyle = ProcessWindowStyle.Hidden; 我希望能够解决问题!

答案 2 :(得分:0)

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

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

此示例运行LUA编译器并将所有错误消息(async)返回到字符串“Result”。我在调用此编译器的表单应用程序中的多行文本框中显示此sting。

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

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

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

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

最后,您可能希望禁止命令窗口可见。这段代码将为您完成:

{{1}}