Что является хорошей альтернативой использованию CopyData для приложений с повышенными правами
У меня есть приложение, которое останавливает службу, копирует файл и снова запускает службу. Я хочу, чтобы он отображал индикатор выполнения и не имел дополнительного окна, не менял экраны, просто позвольте UAC делать свое дело и продолжить с этого момента (это программа конфигурации, поэтому она по-прежнему может использоваться как обычный пользователь со значком щита на копии кнопка).
Это делается путем открытия отдельного приложения (другого, сделанного невидимым, как в msiexec) в качестве администратора, затем новое делает свое дело и отправляет обратно отчеты о ходе выполнения через SendMessage. Это прекрасно работает, но оказывается, что SendMessage работает только один путь между приложениями администратора / не-администратора. Перенаправление StandardInput не сработает, потому что для этого требуется отключение ShellExecute, а для "runas" - включение ShellExecute.
Я не хочу использовать файл, потому что это будет медленно и представляет угрозу безопасности (я отправлял код ключа вместе с сообщениями CopyData, которые раньше содержали команды). Может ли быть другой способ перенаправить StandardInput/Output? Как MSI это делает?
Я использую C# для этого.
1 ответ
Я собирался предложить трубы, как Саймон.
Однако один из приемов заключается в том, что процесс с более высокой целостностью должен создать канал и пометить его со средним обязательным уровнем целостности, чтобы процесс со средней целостностью мог получить к нему доступ.