我目前正在将一个 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
用于斜杠),或者我是否必须检查手动当前操作系统?
最佳答案
This应该是你需要的:
processStartInfo.EnvironmentVariables["PATH"] += Path.PathSeparator + directory;
关于c# - 如何安全地附加到 ProcessStartInfo.EnvironmentVariables ["PATH"],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57362291/