Я заканчиваю тем, что избавляюсь от P4Api, как предложено в комментарии, и в основном я использую System.Diagnostics.Process
для вызова p4.exe и передаю некоторые аргументы, чтобы сделать все, что мне нужно. Вот мое решение для этого:
public bool RunCommand<T>(string command, Func<string, string, T> output,out T outputResult, params string[] args)
{
string logParams = "-zprog=MyApp -zversion=1.1";
Process proc = new Process();
proc.StartInfo.WorkingDirectory = "";
proc.StartInfo.FileName = "p4.exe";
proc.StartInfo.Arguments = logParams + " " + command + " ";
foreach (string s in args)
{
proc.StartInfo.Arguments += s + " ";
}
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.Start();
StreamReader strOutput = proc.StandardOutput;
StreamReader strError = proc.StandardError;
outputResult = output(strOutput.ReadToEnd(), strError.ReadToEnd());
proc.WaitForExit();
return true;
}
Func<string, string, T> output
позволяет мне анализировать выходные данные процесса и ошибки, получать необходимые данные из запроса P4 и возвращать их с помощью out T outputResult
, как команда " где «это возвращает путь к хранилищу из пути к рабочей области.
Я надеюсь, что это поможет другим людям с похожими проблемами.