Выполнение процесса из приложения .NET без запроса UAC - PullRequest
8 голосов
/ 29 мая 2011

У меня есть сценарий, в котором мне нужно запустить EXE из моего приложения .NET, но я не могу обойти всплывающее окно с запросом UAC. Запрос запускается еще до запуска другого EXE-файла - возможно, при самом вызове Process.Start.

Я использую этот код для запуска приложения:

            var info = new ProcessStartInfo(path, "params");
            info.Verb = "runas";
            try
            {
                Process.Start(info);
            }
            catch (System.ComponentModel.Win32Exception)
            {
                // Person denied UAC escallation
                return false;
            }

Оба EXE-файла (мое приложение и другой EXE-файл) имеют это в своем манифесте:

    <requestedExecutionLevel level="asInvoker" uiAccess="false" />

Как запустить другой EXE-файл, не вызывая приглашение UAC, и иметь у него тот же токен доступа, что и у вызывающего приложения (чтобы он мог вносить изменения в файлы в папке приложения и т. Д.)?

1 Ответ

8 голосов
/ 29 мая 2011

Для предотвращения запроса UAC при запуске второго EXE:

1) не используйте Verb = "runas" - это даст вам UAC каждый раз, когда

2) не используйте setup-как имена файлов для вашего EXE.Вот правило от MSDN :

Перед созданием 32-битного процесса проверяются следующие атрибуты, чтобы определить, является ли он установщиком:

Имя файлавключает такие ключевые слова, как «установка», «настройка», «обновление» и т. д.

Ключевые слова в следующих полях ресурсов управления версиями: поставщик, название компании, название продукта, файл

описание, исходное имя файла, Внутреннее имя и Имя экспорта.

Ключевые слова в параллельном манифесте, встроенном в исполняемый файл.

Ключевые слова в определенных записях StringTable, связанных в исполняемом файле.

Ключевые атрибуты в данных RC, связанных в исполняемом файле.

Целевые последовательности байтов в исполняемом файле.

...