【发布时间】:2019-12-13 04:41:32
【问题描述】:
我目前正在将 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 用于斜杠),还是我必须手动检查当前操作系统?
【问题讨论】:
标签: c# .net-core process environment-variables