3

我想通过我的 c# 代码运行一个 exe 文件。exe 文件是用 c# 编写的控制台应用程序。

控制台应用程序执行一些操作,包括将内容写入数据库和将一些文件写入目录。

控制台应用程序(exe 文件)需要用户的一些输入。就像它首先问的那样,“你想重置数据库吗?” y 表示是,n 表示否。如果用户再次做出选择,那么应用程序会再次询问,“您要重置文件吗?” y 表示是,n 表示否。如果用户做出一些选择,控制台应用程序就会开始执行。

现在我想通过我的 c# 代码运行这个 exe 控制台应用程序。我正在尝试这样

        string strExePath = "exe path";
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.CreateNoWindow = false;
        startInfo.UseShellExecute = false;
        startInfo.FileName = strExePath;
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;

        using (Process exeProcess = Process.Start(startInfo))
        {
            exeProcess.WaitForExit();
        }

我想知道如何通过我的 c# 代码向控制台应用程序提供用户输入?

请帮我解决这个问题。提前致谢。

4

3 回答 3

2

您可以从 exe 文件重定向输入和输出流。有关示例,
请参见重定向标准输出 和重定向标准输入。

阅读:

 // Start the child process.
 Process p = new Process();
 // Redirect the output stream of the child process.
 p.StartInfo.UseShellExecute = false;
 p.StartInfo.RedirectStandardOutput = true;
 p.StartInfo.FileName = "Write500Lines.exe";
 p.Start();
 // Do not wait for the child process to exit before
 // reading to the end of its redirected stream.
 // p.WaitForExit();
 // Read the output stream first and then wait.
 string output = p.StandardOutput.ReadToEnd();
 p.WaitForExit();

对于写作:

 ...
 myProcess.StartInfo.RedirectStandardInput = true;
 myProcess.Start();

 StreamWriter myStreamWriter = myProcess.StandardInput;
 myStreamWriter.WriteLine("y");
 ...
 myStreamWriter.Close();
于 2013-04-16T06:17:42.507 回答
0

ProcessStartInfo有一个构造函数,您可以将参数传递给:

public ProcessStartInfo(string fileName, string arguments);

或者,您可以在它的属性上设置它:

ProcessStartInfo p = new ProcessStartInfo();
p.Arguments = "some argument";
于 2013-04-16T06:15:10.817 回答
0

以下是如何将参数传递给 *.exe 文件的示例:

                Process p = new Process();

                // Redirect the error stream of the child process.
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.FileName = @"\filepath.exe";
                p.StartInfo.Arguments = "{insert arguments here}";

                p.Start();


                error += (p.StandardError.ReadToEnd());
                p.WaitForExit();
于 2013-04-16T06:15:20.677 回答