2014-01-29 65 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%"); 
} 
相關問題