在 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;
我正在尝试 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;