将信息传回控制台应用程序的批处理 window
Batch process to pass information back to console application window
我有一个运行 .bat
和 .vbs
文件的控制台应用程序。
启动这些进程的方法如下:
public void runProcess(string aPath,string aName,string aFiletype)
{
string stInfoFileName;
string stInfoArgs;
if(aFiletype == "bat")
{
stInfoFileName = (@aPath + @aName);
stInfoArgs = string.Empty;
}
else
{ //vbs
stInfoFileName = @"cscript";
stInfoArgs = "//B //Nologo " + aName;
}
this.aProcess.StartInfo.FileName = stInfoFileName;
this.aProcess.StartInfo.Arguments = stInfoArgs;
this.aProcess.StartInfo.WorkingDirectory = @aPath;
this.aProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
this.aProcess.Start();
Console.WriteLine("information passed from batch: ???");
this.aProcess.WaitForExit(); //<-- Optional if you want program running until your script exit
this.aProcess.Close();
}
它正在启动的当前 .bat
文件用于通过 ftp(ftp
、ftps
或 sftp
)发送数据。
当进程为 运行 时,所有信息都显示在进程 windows 中,例如可能会发生错误,文件不会传输,并且在此 "child" 进程 window 中会显示一条详细说明此错误的消息。该过程完成后,"child" window 将与消息一起消失。
我能否以某种方式return将此有用信息发送到我的主控制台应用程序window?
检查进程退出代码 (Process.ExitCode
) and/or 捕获控制台输出。
见Capturing console output from a .NET application (C#)
尽管您最好使用一些本机 .NET SFTP/FTP 库。
对于 SFTP,参见 SFTP Libraries for .NET
对于 FTP 和 FTPS,可以使用 .NET 框架中的 FtpWebRequest
。
如果您想要一站式解决方案,我可以虚心向您推荐 my WinSCP .NET assembly。使用程序集,您可以为 SFTP、FTP 和 FTPS 使用相同的代码。在内部,程序集实际运行 WinSCP 控制台应用程序。所以它正在做你自己编写代码的同样事情。
如果将 this.aProcess.StartInfo.UseShellExecute
设置为 false
,则子进程应使用现有控制台 window。
对于批处理文件,此更改还意味着您需要显式调用 cmd /c
到 运行 它们,其方式与您当前调用 cscript /B
到 运行.vbs 脚本。
我有一个运行 .bat
和 .vbs
文件的控制台应用程序。
启动这些进程的方法如下:
public void runProcess(string aPath,string aName,string aFiletype)
{
string stInfoFileName;
string stInfoArgs;
if(aFiletype == "bat")
{
stInfoFileName = (@aPath + @aName);
stInfoArgs = string.Empty;
}
else
{ //vbs
stInfoFileName = @"cscript";
stInfoArgs = "//B //Nologo " + aName;
}
this.aProcess.StartInfo.FileName = stInfoFileName;
this.aProcess.StartInfo.Arguments = stInfoArgs;
this.aProcess.StartInfo.WorkingDirectory = @aPath;
this.aProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
this.aProcess.Start();
Console.WriteLine("information passed from batch: ???");
this.aProcess.WaitForExit(); //<-- Optional if you want program running until your script exit
this.aProcess.Close();
}
它正在启动的当前 .bat
文件用于通过 ftp(ftp
、ftps
或 sftp
)发送数据。
当进程为 运行 时,所有信息都显示在进程 windows 中,例如可能会发生错误,文件不会传输,并且在此 "child" 进程 window 中会显示一条详细说明此错误的消息。该过程完成后,"child" window 将与消息一起消失。
我能否以某种方式return将此有用信息发送到我的主控制台应用程序window?
检查进程退出代码 (Process.ExitCode
) and/or 捕获控制台输出。
见Capturing console output from a .NET application (C#)
尽管您最好使用一些本机 .NET SFTP/FTP 库。
对于 SFTP,参见 SFTP Libraries for .NET
对于 FTP 和 FTPS,可以使用 .NET 框架中的 FtpWebRequest
。
如果您想要一站式解决方案,我可以虚心向您推荐 my WinSCP .NET assembly。使用程序集,您可以为 SFTP、FTP 和 FTPS 使用相同的代码。在内部,程序集实际运行 WinSCP 控制台应用程序。所以它正在做你自己编写代码的同样事情。
如果将 this.aProcess.StartInfo.UseShellExecute
设置为 false
,则子进程应使用现有控制台 window。
对于批处理文件,此更改还意味着您需要显式调用 cmd /c
到 运行 它们,其方式与您当前调用 cscript /B
到 运行.vbs 脚本。