我正在尝试打开外部可执行文件.我可以使用以下Process类来轻松打开外部可执行文件System.Diagnostics:
Process p = new Process()
p.StartInfo.FileName = processName;
p.Start();
Run Code Online (Sandbox Code Playgroud)
这适用于大多数程序,如浏览器和记事本,创建进程并显示其图形界面.但是,当我尝试打开我想要的程序时,该过程已启动(可以在任务管理器中看到它,甚至需要整个CPU核心进行处理),但GUI窗口不会显示.一个进程可能会发生什么,Process.Start从而不显示其GUI?
作为参考,我想要执行的程序是ADOM版本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
Run Code Online (Sandbox Code Playgroud)
InB*_*een -1
您需要将 设为WorkingDirectory可执行文件所在的根文件夹。
var executablePath = .....;
var p = new Process();
p.StartInfo = new ProcessStartInfo(executablePath);
p.StartInfo.WorkingDirectory = Path.GetDirectoryName(executablePath);
p.Start();
Run Code Online (Sandbox Code Playgroud)
WorkingDirectory的默认值为%SYSTEMROOT%\System32。许多遗留应用程序都有硬编码的相对路径,这些路径解析为所述目录的完整路径,并且在尝试读取(或创建)不应该读取的文件时会严重失败。