【发布时间】:2013-07-05 18:47:49
【问题描述】:
我有一个第三方可执行命令被捆绑到我的 winform 应用程序中。该命令放置在执行应用程序的目录中名为“tools”的目录中。
比如我的winform mytestapp.exe放在D:\apps\mytestapp目录下,那么第三方命令的路径就是D:\apps\mytestapp\tools\mycommand.exe。我正在使用 Application.StartupPath 来识别 mytestapp.exe 的位置,以便它可以从任何位置运行。
我通过启动一个进程 - System.Diagnostics.Process.Start 并使用命令提示符执行该命令来执行此命令。运行命令需要传递额外的参数。
我面临的问题是,如果我的应用程序的路径和命令中没有任何空格,它可以正常工作
例如, 如果我的应用程序和命令如下所示,它可以工作 D:\apps\mytestapp\mytestapp.exe D:\apps\mytestapp\tools\mycommand.exe "parameter1" "parameter2" - 这个可行
但是,如果路径中有空格,则会失败
C:\Documents and settings\mytestapp\tools\mycommand.exe "parameter1" "parameter2" - 不起作用 C:\Documents and settings\mytestapp\tools\mycommand.exe "parameter1 parameter2" - 不起作用 "C:\Documents and settings\mytestapp\tools\mycommand.exe" "parameter1 parameter2" - 不起作用 “C:\Documents and settings\mytestapp\tools\mycommand.exe parameter1 parameter2” - 不起作用
我尝试使用双引号来执行如上所示的命令,但它不起作用。 那么,如何执行我的自定义命令。对此问题的任何输入或解决方法? 提前致谢。
这是启动进程的代码
try
{
System.Diagnostics.ProcessStartInfo procStartInfo =
new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
proc.WaitForExit();
}
catch (Exception objException)
{
// Log the exception
}
【问题讨论】:
-
有什么异常?你能在 Process.Start 周围分享你的代码吗
-
显示您的 processstartinfo 设置代码,您应该会得到快速的答案 :)
-
@retailcoder,我认为 processstartinfo 中没有错误,因为当路径中没有空格时,我得到了所需的输出。
-
如果您将文件路径作为参数传入,您需要将它们封装在引号中,或者转义空格。