У меня есть функция, которая выдает мне аргументы в виде строки.
private string GetArguments()
{
var fullPath = Path.Combine(
SharedState.GetValue<string>(ProScanService.INSTALLDIR),
ProScanService.EXECUTABLENAME);
var port = SharedState.GetValue<ushort>(ProScanService.PORT);
var arguments = new StringBuilder();
arguments.Append($" binPath= \"{fullPath}");
arguments.Append($" --port={port}\" start= auto");
return arguments.ToString();
}
Это работает. Но если я добавлю аргумент "служба" в середине. Я получил сообщение об ошибке: ошибка == [SC] StartService: ошибка OpenService 1060
arguments.Append($" --port={port}\" service start= auto");
Аргументы используются для этой службы -> pro c .StartInfo.Arguments = $ "{request } \ "{name} \" {arguments} ";
public static QueryResult Query(string name, string request, string arguments)
{
var serviceControlPath = Path.GetFullPath(
Environment.GetEnvironmentVariable("windir") + @"\system32\sc.exe");
QueryResult result;
var timeout = false;
using (var proc = new Process())
{
try
{
proc.StartInfo.FileName = serviceControlPath;
proc.StartInfo.Arguments = $"{request} \"{name}\" {arguments}";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
timeout = !proc.WaitForExit(45000);
}
catch (Exception)
{
// ignored
}
finally
{
result = new QueryResult(
timeout,
proc.ExitCode,
proc.StandardError.ReadToEnd(),
proc.StandardOutput.ReadToEnd()
);
}
}
if (timeout || result.ExitCode != 0)
{
if (result.ExitCode == 1060 && string.Compare(request, "query",
StringComparison.OrdinalIgnoreCase) != 0)
{
var msg = new StringBuilder();
msg.AppendLine($"error == {result.Error}");
msg.AppendLine($"output == {result.Output}");
throw new Exception(msg.ToString());
}
}
return result;
}
Как должны быть приведены эти аргументы?