C# P4Api использует -zversion и -zprog для пользовательской регистрации - PullRequest
1 голос
/ 27 января 2020

Я создаю приложение с C# с использованием P4Api, но мне нужно использовать параметры -zprog и -zversion, чтобы журналы сервера отображали, из какого приложения поступают команды, как объясняется в этом посте: https://community.perforce.com/s/article/11551

string logParams = "-zprog=MyApp -zversion=1.1";
P4Command cmd = new P4Command(rep, "sync", false, path);
  • Я пытался передать logParams в качестве аргумента P4Command до и после пути, но он распознает их как другой путь к файлу, возвращая Сообщение об ошибке «нет таких файлов».
  • Я пытался добавить его перед «syn c», но он распознал его как команду, поэтому он возвращает сообщение «Неизвестная команда» ошибка.

Как объясняет ссылка, с помощью cmd эта команда должна быть "p4 -zprog = MyApp -zversion = 1.1 syn c [путь]", поэтому эти параметры должны быть для "p4", а не для "syn c"

Можно ли добавить эти параметры в команду? Если нет, какие-либо предложения о том, как это сделать?

Спасибо.

1 Ответ

1 голос
/ 30 января 2020

Я заканчиваю тем, что избавляюсь от 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, как команда " где «это возвращает путь к хранилищу из пути к рабочей области.

Я надеюсь, что это поможет другим людям с похожими проблемами.

...