首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# P4Api使用-zversion和-zprog进行自定义日志记录。

C# P4Api使用-zversion和-zprog进行自定义日志记录。
EN

Stack Overflow用户
提问于 2020-01-27 13:48:03
回答 1查看 104关注 0票数 1

我正在使用C#构建一个使用P4Api的应用程序,但是我需要使用参数-zprog和-zversion,这样服务器日志就可以显示命令从哪个应用程序中来,这篇文章解释道:https://community.perforce.com/s/article/11551

代码语言:javascript
复制
string logParams = "-zprog=MyApp -zversion=1.1";
P4Command cmd = new P4Command(rep, "sync", false, path);

  • 我尝试将logParams作为参数传递给P4Command,在路径之前和之后,但是它将它们识别为文件的另一个路径,返回一个“没有这样的文件”的消息错误。
  • 我尝试在“P4Command”之前添加它,但是它识别它为一个命令,所以它返回一个“未知命令”消息错误。

正如链接所解释的那样,使用cmd,这个命令应该是"p4 -zprog=MyApp -zversion=1.1 sync path",因此这个参数应该是"p4“,而不是”p4“。

是否可以将此参数添加到命令中?如果没有,对如何做到这一点有什么建议?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-30 12:14:11

正如注释中所建议的那样,我最终摆脱了P4Api,基本上是使用System.Diagnostics.Process调用p4.exe并传递一些参数来完成我需要做的任何事情。这是我的解决办法:

代码语言:javascript
复制
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返回数据,比如从工作区路径返回Depot路径的命令"where“。

我希望这对其他有类似问题的人有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59932485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档