我可以find很多讨论Process.Start的线程,但没有一个听起来像我的。 下面的代码已经在Windows Server 2003&2008上工作了很多年。我现在试图在2012年安装相同的应用程序,但是虽然“My.exe”启动,Process.Start本身也挂起 – 所以“Started”从不logging。 有人可以提出这个问题可能是什么?
提前谢谢了,
迈克尔
ProcessStartInfo psi = new ProcessStartInfo("C:\\My.exe"); psi.UseShellExecute = false; psi.LoadUserProfile = false; psi.WindowStyle = ProcessWindowStyle.Normal; psi.ErrorDialog = false; if (Environment.OSVersion.Version.Major >= 6) psi.Verb = "runas"; psi.Arguments = "\"MyArgs\""; psi.RedirectStandardError = true; psi.RedirectStandardOutput = true; _logger.Info("Starting"); _process = Process.Start(psi); _logger.Info("Started");
可能是这样的吗?
还假设
“C:\ My.exe”
是一个错字=“C:\\ My.exe”或@“C:\ My.exe”
我相信只有在ProcessStartInfo.UseShellExecute = true的情况下,交互式要求管理权限的“runas”动词才会起作用,假定应用程序以交互方式运行,并且希望提示用户批准管理操作。 如果没有,你可能会考虑要求清单的权限。
你有没有尝试在try / catch中包装_process = Process.Start(psi)并记录任何异常?
你有没有尝试把这个代码放到一个控制台应用程序中,并且把两个RedirectStandard …都变成false来看看会发生什么?