C# P4Api 使用 -zversion 和 -zprog 进行自定义日志记录
C# P4Api use -zversion and -zprog for custom logging
我正在使用 P4Api 使用 C# 构建一个应用程序,但我需要使用参数 -zprog 和 -zversion 以便服务器日志显示命令来自哪个应用程序,如此 post 解释:https://community.perforce.com/s/article/11551
string logParams = "-zprog=MyApp -zversion=1.1";
P4Command cmd = new P4Command(rep, "sync", false, path);
- 我尝试将 logParams 作为参数传递给 P4Command,在路径之前和之后,但它将它们识别为另一个文件路径,返回 "no such file(s)" 消息错误。
- 我试图在 "sync" 之前添加它,但它会将其识别为命令,因此它 returns 一个 "Unknown command" 消息错误。
正如 link 所解释的,使用 cmd,这个命令应该是 "p4 -zprog=MyApp -zversion=1.1 sync [path]",所以这个参数应该是 "p4" 而不是 "sync"
是否可以将此参数添加到命令中?
如果没有,关于如何做到这一点有什么建议吗?
谢谢。
我最终摆脱了 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
return 获取数据,就像命令 "where" return 是工作区路径中的 Depot 路径。
我希望这对其他有类似问题的人有所帮助。
我正在使用 P4Api 使用 C# 构建一个应用程序,但我需要使用参数 -zprog 和 -zversion 以便服务器日志显示命令来自哪个应用程序,如此 post 解释:https://community.perforce.com/s/article/11551
string logParams = "-zprog=MyApp -zversion=1.1";
P4Command cmd = new P4Command(rep, "sync", false, path);
- 我尝试将 logParams 作为参数传递给 P4Command,在路径之前和之后,但它将它们识别为另一个文件路径,返回 "no such file(s)" 消息错误。
- 我试图在 "sync" 之前添加它,但它会将其识别为命令,因此它 returns 一个 "Unknown command" 消息错误。
正如 link 所解释的,使用 cmd,这个命令应该是 "p4 -zprog=MyApp -zversion=1.1 sync [path]",所以这个参数应该是 "p4" 而不是 "sync"
是否可以将此参数添加到命令中? 如果没有,关于如何做到这一点有什么建议吗?
谢谢。
我最终摆脱了 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
return 获取数据,就像命令 "where" return 是工作区路径中的 Depot 路径。
我希望这对其他有类似问题的人有所帮助。