将多个参数传递给从 Windows 窗体运行的控制台应用程序
Posted
技术标签:
【中文标题】将多个参数传递给从 Windows 窗体运行的控制台应用程序【英文标题】:Passing multiple arguments to running console application from windows form 【发布时间】:2018-09-16 10:07:05 【问题描述】:我有控制台应用程序,我们将其命名为 X.exe。它适用于两个参数让我们说 'a' 和 'a.tmp' 其中 a 是我的输入文件名 和 a.tmp 是输出文件名。在控制台上,我通常运行如下应用程序:X a a.tmp 但首先我必须出现在输入文件“a”的位置,否则如果我试图给出其绝对路径,应用程序将无法工作。 我已经创建了 Windows 窗体来运行这些控制台应用程序,但正如我之前所说的,应用程序必须在文件位置启动。 我尝试使用进程对象,但应用程序无法正常工作。 我创建了两个进程:
-
转到文件位置
在文件中执行应用程序
位置
Question: can I excute these multiple commands in one go and avoid using IPC?
【问题讨论】:
您还可以提供文件的绝对(完整路径)。 2 个进程无济于事。一个进程将更改当前工作目录,而另一个则不会。两个进程就是这样:两个进程独立于另一个进程做自己的事情。万一您的 X.exe 不支持其参数的完整绝对路径,可以通过查看Process.Start(ProcessStartInfo)
和 ProcessStartInfo.WorkingDirectory
(docs.microsoft.com/en-gb/dotnet/api/…) 的文档轻松找到解决方案
【参考方案1】:
您可以使用ProcessStartInfo.WorkingDirectory
。
例如来自MS Docs - ProcessStartInfo Class
WorkingDirectory
属性在UseShellExecute
为true
时与UseShellExecute
为false
时的行为不同。当UseShellExecute
为true
时,WorkingDirectory
属性指定可执行文件的位置。如果WorkingDirectory
是一个空字符串,则认为当前目录包含可执行文件。注意 - 当
UseShellExecute
为true
时,启动可执行文件的应用程序的工作目录也是可执行文件的工作目录。当
UseShellExecute
为false
时,WorkingDirectory
属性不用于查找可执行文件。相反,它的值适用于已启动的进程,并且仅在新进程的上下文中才有意义。
例如
public static void Main()
Process myProcess = new Process();
try
myProcess.StartInfo.UseShellExecute = true;
// You can start any process, HelloWorld is a do-nothing example.
myProcess.StartInfo.FileName = "X.exe"; /
myProcess.WorkingDirectory = "C:\SomeDirectory That contains A and A.tmp"
myProcess.Start();
catch (Exception e)
Console.WriteLine(e.Message);
【讨论】:
X.exe 在任何地方都是可执行的,但输入参数不能是绝对路径。这就是为什么我首先需要在文件位置显示。假设我的驱动器不是默认的 c:\ ,它不会改变到指定位置。 那么你只需将工作目录设置为A
和A.exe
存在的路径以上是关于将多个参数传递给从 Windows 窗体运行的控制台应用程序的主要内容,如果未能解决你的问题,请参考以下文章