Самообновляющееся клиентское приложение .NET, которое нужно записать в папку Program File - PullRequest
2 голосов
/ 08 февраля 2009

Аналогично: Запросить повышение прав Windows UAC, если путь защищен?

У меня установлено клиентское приложение .NET в папке c: \ Program Files (Windows Vista). Это приложение должно само обновляться, но не из-за проблем с разрешениями. Автообновление должно просто заменить пару сборок, но все они находятся в каталоге c: \ Program File, и приложение выдает следующее исключение:

System.UnauthorizedAccessException: Доступ к пути 'C: \ Program Файлы ... »отказано.

У меня нет контроля над тем, где приложение может быть установлено, и разрешения. Есть ли обходной путь для этого? Можно ли запросить права администратора за пару секунд? Можно ли открыть окно UAC? Я вполне уверен, что есть обходной путь ... В противном случае, как Firefox сможет обновить себя?

Заранее спасибо за помощь и идеи!

Ответы [ 2 ]

5 голосов
/ 08 февраля 2009

Не могли бы вы использовать метод развертывания Click Once? Мы используем это для внутреннего приложения, и у пользователей не возникает проблем с разрешениями при публикации новой версии. Им предлагается установить обновление при запуске приложения (если существует новая версия), и оно устанавливается без помех.

3 голосов
/ 08 февраля 2009

Вы не можете повысить права доступа процесса на полпути, но вы можете запустить другой отдельный процесс с более высокими разрешениями, который может выполнить работу за вас.

Получите ваше основное приложение, чтобы поместить все файлы / сведения об установке во временное местоположение с низким разрешением. Когда вы будете готовы, запустите небольшое приложение, единственной задачей которого является копирование этих файлов в каталог Program Files (и, возможно, перезапустите ваше основное приложение с новыми обновлениями). Отметьте это приложение как требующее необходимого разрешения для копирования в каталог Program Files или записи в реестр (или что-либо еще необходимое).

...