Я хочу запустить дочерний процесс (действительно то же самое, консольное приложение) с повышенными привилегиями, но со скрытым окном.Повышающие привилегии не работают с UseShellExecute = false
делать дальше:
var info = new ProcessStartInfo(Assembly.GetEntryAssembly().Location)
{
UseShellExecute = true, // !
Verb = "runas",
};
var process = new Process
{
StartInfo = info
};
process.Start();
и это работает:
var identity = new WindowsPrincipal(WindowsIdentity.GetCurrent());
identity.IsInRole(WindowsBuiltInRole.Administrator); // returns true
Но UseShellExecute = true
создает новое окно, и я также не могу перенаправить вывод.
Так что, когда я делаю следующий:
var info = new ProcessStartInfo(Assembly.GetEntryAssembly().Location)
{
RedirectStandardError = true,
RedirectStandardOutput = true,
UseShellExecute = false, // !
Verb = "runas"
};
var process = new Process
{
EnableRaisingEvents = true,
StartInfo = info
};
DataReceivedEventHandler actionWrite = (sender, e) =>
{
Console.WriteLine(e.Data);
};
process.ErrorDataReceived += actionWrite;
process.OutputDataReceived += actionWrite;
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
Это не повышение привилегий и выше код возвращает ложь. Зачем??
Кстати, вы можете написать 'DataReceivedEventHandler actionWrite = ...' и 'process.ErrorDataReceived + = actionWrite'. – SLaks
Можете ли вы протестировать с помощью UseShellExecute = true, Verb = "runas", а события ErrorDataReceived - как комментарий @SLaks? – Kiquenet