我正在尝试打开外部可执行文件。我可以使用Process
中的System.Diagnostics
类轻松打开外部可执行文件:
Process p = new Process()
p.StartInfo.FileName = processName;
p.Start();
这适用于大多数程序,如浏览器和记事本,创建进程并显示其图形界面。但是,当我尝试打开我想要的程序时,该过程已启动(可以在任务管理器中看到它,甚至需要整个CPU核心进行处理),但GUI窗口不会显示。从Process.Start
到不显示其GUI的过程可能会发生什么?
作为参考,我想要执行的程序是ADOM release 60,当我直接在Explorer shell或Powershell中打开它时,它运行100%。这在控制台和WindowsForms应用程序中都是可重现的。
以下是其他一些无效的设置:
p.StartInfo.CreateNoWindow = true; // or false
p.StartInfo.ErrorDialog = false;
p.StartInfo.WindowStyle = /* any of possible values */;
p.StartInfo.UseShellExecute = true; // or false
答案 0 :(得分:1)
您需要将WorkingDirectory
设置为可执行文件所在的根文件夹。
var executablePath = .....;
var p = new Process();
p.StartInfo = new ProcessStartInfo(executablePath);
p.StartInfo.WorkingDirectory = Path.GetDirectoryName(executablePath);
p.Start();
WorkingDirectory
的默认值为%SYSTEMROOT%\System32
。许多遗留应用程序具有硬编码的相对路径,这些路径可以解析为具有所述目录的完整路径,并且在尝试读取(或创建)不应该的文件时将会失败。