我正在从C#Windows窗体应用程序中调用/启动.exe应用程序和.bat批处理文件(我也在传递参数)。如何确定是否需要将ProcessStartInfo.UseShellExecute属性设置为true或false?在哪种情况下,真实的情况会比错误的情况好,反之亦然?
我正在使用ProcessStartInfo类来设置所有过程信息。然后,我使用System.Diagnostics.Process.Start(ProcessStartInfo)方法启动基于我的ProcessStartInfo的进程。
using System.Diagnostics;
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.FileName = "[something]";
processInfo.Arguments = "[parameter1] [parameter2] [parameter3]";
Process.Start(processInfo);
我希望流程能够启动并正常运行。如果我需要添加更多信息/澄清一些问题,请告诉我,这是我的第一个问题。
答案 0 :(得分:1)
您可以在.NET源代码中看到:
内部函数 StartWithShellExecuteEx =>调用ShellExecuteEx
内部函数 StartWithCreateProcess =>调用CreateProcessWithLogonW或CreateProcessW
当您要启动与扩展名关联的可执行文件时,通常使用true。 就像:
using (Process p = new Process())
{
string sImage = @"e:\test.jpg";
p.StartInfo.FileName = sImage;
p.StartInfo.Verb = "open";
p.StartInfo.UseShellExecute = true;
p.Start();
}
如果我设置为false,它将失败,因为它将尝试使用“ e:\ test.jpg”作为命令行来调用CreateProcessW