C# 在 Linux 中使用进程。传递参数的问题
Posted
技术标签:
【中文标题】C# 在 Linux 中使用进程。传递参数的问题【英文标题】:C# using Process in Linux. Problem with passing arguments 【发布时间】:2021-12-08 01:59:51 【问题描述】:我的程序应该启动一个 Linux 程序并向它传递参数。为了调试,我将 FileName 和 Arguments 打印到控制台。
private static void StartRecording(string channelName)
Console.WriteLine($"Starting recording of the channel channelName");
if (RecordingProcesses.ContainsKey(channelName)) return;
Process recordingProcess = new Process
StartInfo = new ProcessStartInfo
UseShellExecute = false,
FileName = RecorderPath,
Arguments = $"--appId AppId --channel channelName --uid RecordingUid --channelProfile 0 " +
$"--appliteDir AppliteDir --channelKey GetToken(channelName)",
;
recordingProcess.Exited += delegate OnProcessExited(channelName); ;
Console.WriteLine($"Starting process. FileName = recordingProcess.StartInfo.FileName, Arguments = recordingProcess.StartInfo.Arguments");
recordingProcess.Start();
RecordingProcesses.Add(channelName, recordingProcess);
该程序引发错误并说我使用了错误的参数。之后,我关闭程序并尝试通过终端手动启动该进程,方法是将文件名和参数从调试消息复制粘贴到终端,程序运行正常。为什么会这样?如何从我的程序启动进程,结果与我从终端启动它时的结果相同?
【问题讨论】:
也许这对你有用***.com/questions/63237496/… 【参考方案1】:我找到了原因。这是因为其中一个参数包含一个波浪号。从终端运行程序时,它被替换为“/root”。当我使用 Process 时,它并没有取代波浪号。
【讨论】:
终端中的波浪号扩展到用户家。终端中的~
与$HOME
相同。当您的用户未运行该进程或 ~ 未展开时,它将不起作用。我很高兴看到你能够帮助自己。以上是关于C# 在 Linux 中使用进程。传递参数的问题的主要内容,如果未能解决你的问题,请参考以下文章
如何将命令行参数传递给 unix/linux 系统上正在运行的进程?
在 Visual Studio 中通过 C# 将参数传递给 Mac 上的终端