UnauthorizedAccessException с System.IO.File.InternalCopy в ProgramData на Windows 7 - PullRequest
1 голос
/ 30 июля 2010

У меня установлена ​​программа в ProgramData. Я использую UAB 2.1 для обновления приложения, но оно не удалось, потому что доступ к пути запрещен (хорошо с текстовыми файлами, поэтому я думаю, что есть проблемы с UAC). Как я могу получить права на перезапись в ProgramData / MyAppFolder или открыть диалоговое окно, чтобы заметить, что пользователь дает права на перезапись для программы обновления.

Большое спасибо заранее.

Обновление

Я прочитал статью на http://blogs.msdn.com/b/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx. В ней говорится, что Вы захотите создать свой каталог и установить необходимые ACL во время установки. Должен ли я изменить папку установки на LocalAppData или попробуйте установить ACL во время установки согласно статье.

1 Ответ

1 голос
/ 30 июля 2010

Приложениям, которые сами обновляются, трудно под UAC. Лучше всего разделить код, который выполняет обновление, на отдельный исполняемый файл. Поместите манифест с requireAdministrator на этот exe. В основном приложении оставьте код, который проверяет наличие обновлений, и разрешите ему активировать кнопку или элемент меню, когда требуется обновление. Поместите щит на эту кнопку или пункт меню, и пусть он запускает отдельный exe с ShellExecute. Пользователь получит диалоговое окно согласия UAC, которое он будет ожидать из-за щита. Отдельный exe-файл, поскольку он имеет повышенные права, сможет записывать файлы программ и другие защищенные области.

...