我在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;
}
}
}
}
答案 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}}