2014-01-29 38 views
2

我开发,使用的子进程的Process API,与UseShellExecute设置为false派生的应用程序。这个问题是我不想去寻找我产生的进程,因为它们在我的系统PATH中可用。例如,我想通过输入SCRIPT_NAME.py ARGUMENTS来运行Python脚本。但是,当我设置Process.FileNameSCRIPT_NAME.py,我得到一个错误,告诉我它找不到SCRIPT_NAME.py。我想工作目录是哪里SCRIPT_NAME.py是,否则我将不得不指定SCRIPT_NAME.py和它的参数,这是荒谬的和过度的绝对路径。如何在Process.UseShellExecute = false的情况下使用系统PATH?

我可以用cmd.exe /C SCRIPT_NAME.py ARGUMENTS避免这一点,但有问题用武力制止正在推我在这个方向上,而不是命令提示符。

+0

'UseShellExecute = FALSE'基本上转化为一个完整的(相对或绝对)路径的要求。 –

+1

Windows *总是*搜索PATH环境变量中列出的目录。无论使用UseShellExecute。不向我们展示你的PATH看起来像什么使它很难帮助你。 –

回答

0

为了解决这个问题,你只需要搜索组寻找有python.exe一个可用的路径。一旦你找到了,只是完全限定蟒蛇可执行文件在启动过程中

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%"); 
} 
相关问题