У меня есть ответ, который может решить вашу проблему, хотя это не буквально ответ на вопрос, который вы задали.
Что ж, в моем текущем проекте мне нужен системный вызов, который не открывает окнои это дает мне возможность считывать результаты, записанные в стандартный вывод или стандартную ошибку.
На случай, если вы можете с этим смириться - вот код из вышеупомянутой кодовой базы:
public class RsbSystem
{
string command = null;
string param = null;
string commandLine = null;
public int ExitCode = 0;
//..
/// <summary>Exec for apps that don't want console output</summary>
/// <param name="msg">returns output of called program</param>
/// <returns>0 if ok</returns>
/// <remarks>RsbSystem instance keeps the result in member ExitCode</remarks>
public int Exec(ref string msg)
{
var p = new Process();
p.StartInfo.FileName = command;
p.StartInfo.Arguments = param;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.Start();
if (!p.StandardOutput.EndOfStream)
msg = p.StandardOutput.ReadToEnd();
if (!p.StandardError.EndOfStream)
msg += p.StandardError.ReadToEnd();
p.WaitForExit(120000); // this needs to come after readToEnd() RSB: https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput(v=vs.110).aspx
ExitCode = p.ExitCode;
p.Dispose();
return ExitCode;
}
// ..
public RsbSystem(string cmdLine)
{
commandLine = cmdLine;
var pos = 0;
if (cmdLine[0] == '"')
pos = cmdLine.IndexOf("\" ") + 1;
else pos = cmdLine.IndexOf(" ");
command = pos > -1 ? cmdLine.Substring(0, pos).Trim() : cmdLine;
param = pos > -1 ? cmdLine.Substring(pos + 1).TrimStart() : "";
}
}
Также: простите, пожалуйста, что код написан на C # вместо C ++.
Как вы можете видеть, он вызывает любую программу и не использует PowerShell.Если это уже обходной путь для вас - хорошо.Если нет, вы можете подумать о том, чтобы вызвать Powershell из командной строки, используя этот подход и, возможно, получить то, что вам нужно.
Надеюсь, это поможет или хотя бы даст вам представление.