C# 在 Linux 中使用 Process。传递参数的问题
C# using Process in Linux. Problem with passing arguments
我的程序应该启动一个 Linux 程序并向其传递参数。为了调试,我将文件名和参数打印到控制台。
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);
}
那个程序报错说我使用了错误的参数。之后我关闭程序并尝试通过终端手动启动该进程,方法是将调试消息中的 FileName 和 Arguments 复制粘贴到终端,程序运行正常。为什么会这样?我怎样才能从我的程序中启动进程并获得与从终端启动时相同的结果?
找到原因了。这是因为其中一个参数包含波浪号。当 运行 来自终端的程序被替换为“/root”。当我使用 Process 时,它并没有取代代字号。
我的程序应该启动一个 Linux 程序并向其传递参数。为了调试,我将文件名和参数打印到控制台。
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);
}
那个程序报错说我使用了错误的参数。之后我关闭程序并尝试通过终端手动启动该进程,方法是将调试消息中的 FileName 和 Arguments 复制粘贴到终端,程序运行正常。为什么会这样?我怎样才能从我的程序中启动进程并获得与从终端启动时相同的结果?
找到原因了。这是因为其中一个参数包含波浪号。当 运行 来自终端的程序被替换为“/root”。当我使用 Process 时,它并没有取代代字号。