[英]Set ProcessStartInfo.EnvironmentVariables when Verb=“runas”
[英]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.