我正在开发一个使用Process
API生成子进程的应用程序,UseShellExecute
设置为false
。这个问题是我不想去寻找我正在产生的进程,因为它们在我的系统PATH中可用。例如,我只想输入SCRIPT_NAME.py ARGUMENTS
来运行Python脚本。但是,当我将Process.FileName
设置为SCRIPT_NAME.py
时,我收到错误消息,告诉我找不到SCRIPT_NAME.py
。我希望工作目录在SCRIPT_NAME.py
的位置,否则我将必须指定SCRIPT_NAME.py
的绝对路径及其参数,这是荒谬和过分的。
我可以通过使用cmd.exe /C SCRIPT_NAME.py ARGUMENTS
来避免这种情况,但强制暂停命令提示符存在问题,这些问题正在推动我朝这个方向发展。
答案 0 :(得分:2)
要解决这个问题,您只需要搜索一组可用路径,查找具有python.exe的路径。一旦发现完全限定python可执行文件以便在进程中启动
var path = Environment.GetEnvironmentVariable("PATH");
string pythonPath = null;
foreach (var p in path.Split(new char[] { ';' })) {
var fullPath = Path.Combine(p, "python.exe");
if (File.Exists(fullPath)) {
pythonPath = fullPath;
break;
}
}
if (pythonPath != null) {
// Launch Process
} else {
throw new Exception("Couldn't find python on %PATH%");
}