Запустите процесс с более высокими привилегиями и прочитайте его вывод
Нам нужно запустить процесс с необходимыми правами администратора (определенными в его app.manifest) в обычном процессе и прочитать его вывод. Как я вижу, для того, чтобы начать процесс с более высоким правом, нам нужно установить UseShellExecute = true
, Но это мешает нам получить стандартный вывод.
Вот мой фрагмент кода, но для текущего процесса тоже нужны привилегии администратора (что мы не можем себе позволить, поскольку это огромное приложение, и это единственный раздел, требующий повышения прав):
if (bAdmin)
{
Process p = new Process
{
StartInfo =
{
Arguments = "-GetRestorePoints",
FileName = Environment.CurrentDirectory + @"\Hamekare.AdminSettings.exe",
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
RedirectStandardOutput = true,
UseShellExecute = false
}
};
p.OutputDataReceived += p_OutputDataReceived;
p.Start();
p.BeginOutputReadLine();
}
1 ответ
Решение
Я в конечном итоге с помощью Named Pipes
,
Сервер:
PipeSecurity ps = new PipeSecurity();
PipeAccessRule psRule = new PipeAccessRule(@"Everyone", PipeAccessRights.ReadWrite, System.Security.AccessControl.AccessControlType.Allow);
ps.AddAccessRule(psRule);
var server = new NamedPipeServerStream("HKBackUpRestorePipe", PipeDirection.InOut, 1, PipeTransmissionMode.Message, PipeOptions.Asynchronous, 1, 1, ps);
server.WaitForConnection();
StreamWriter writer = new StreamWriter(server);
writer.WriteLine ...
writer.Flush();
Клиент:
var client = new NamedPipeClientStream("HKBackUpRestorePipe");
client.Connect();
StreamReader reader = new StreamReader(client);
StreamWriter writer = new StreamWriter(client);
string line;
while ((line = reader.ReadLine()) != "\t\t<<Finished!>>")
...