簡體   English   中英

如何安全地附加到 ProcessStartInfo.EnvironmentVariables["PATH"]

[英]How to safely append to ProcessStartInfo.EnvironmentVariables["PATH"]

我目前正在將 C# 應用程序從 .NET Framework 移植到 .NET Core,以便能夠在 Linux 上運行它。 在某些時候,此應用程序使用System.Diagnostics.Process類在單獨的進程中啟動另一個程序。 雖然這在一般情況下運行良好,但該特定程序需要使用修改后的PATH環境變量運行。 這是我為 Windows 所做的(在 Linux 上測試的路徑已更改):

string directory = "/tmp";
ProcessStartInfo processStartInfo = new ProcessStartInfo
{
    Arguments = "-c \"echo $PATH\"",
    FileName = "/bin/bash",
};
processStartInfo.EnvironmentVariables["PATH"] += ";" + directory;
Process.Start(processStartInfo);

不幸的是 Linux 使用冒號(“:”)作為路徑分隔符,因此程序產生

/usr/local/bin:/usr/bin:/bin:/usr/games;/tmp

而不是所需的輸出

/usr/local/bin:/usr/bin:/bin:/usr/games:/tmp

我現在的問題是:如何以安全的跨平台方式正確更新PATH變量? 是否有一些系統相關的屬性來檢索分隔符(如換行符的Environment.NewLine或斜杠的Path.DirectorySeparatorChar ),或者我是否必須手動檢查當前的操作系統?

應該是你需要的:

processStartInfo.EnvironmentVariables["PATH"] += Path.PathSeparator + directory;

只需檢查您是否在 linux 上運行。 如果是這樣,請使用“:”而不是“;”。

int platform = (int) Environment.OSVersion.Platform;
bool isLinux = (platform == 4) || (platform == 6) || (platform == 128);

string directory = "/tmp";
ProcessStartInfo processStartInfo = new ProcessStartInfo
{
    Arguments = "-c \"echo $PATH\"",
    FileName = "/bin/bash",
};
processStartInfo.EnvironmentVariables["PATH"] += (isLinux ? ":" : ";") + directory;
Process.Start(processStartInfo);

參考: 檢測Linux

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM