如何将系统PATH与Process.UseShellExecute = false一起使用?

时间:2014-01-29 01:32:31

标签: c# process path

我正在开发一个使用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来避免这种情况,但强制暂停命令提示符存在问题,这些问题正在推动我朝这个方向发展。

1 个答案:

答案 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%");
}