Перезапись DLL выдает отказ в доступе / ошибка 5 в Windows 7

Я разработал автообновление для своего приложения, которое получает список хэшей MD5 для всех файлов с сервера обновлений и загружает новые файлы в случае несоответствия. На данный момент это происходит только для основного файла DLL, который загружается во время выполнения после (!) Обновления, завершившего свою работу.

Он отлично работает в Windows XP, но некоторые пользователи уже жаловались, что программа обновления выдает ошибку 5 "Доступ запрещен" при попытке перезаписать указанный DLL-файл. Если они запускают его с правами администратора, это работает, но для них досадно всегда соглашаться на привилегии администратора при запуске программы.

Мой вопрос: почему доступ к перезаписи этой DLL запрещен, есть ли способ сделать это без приглашения UAC?

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

PS: я использую Qt 4.7, особенно метод QFile::open с QFile::WriteOnly | QFile::Truncate и вызов QMessageBox, если открытие завершается неудачно с errorString() и некоторым объяснением.

Спасибо!

1 ответ

Вы убедились, что приложение является "единичным экземпляром", т.е. никогда не запускается дважды?

Если бы не это могло быть объяснение...

Что касается того, чтобы приложение всегда запускалось от имени администратора - вы НИКОГДА не должны делать это...

РЕДАКТИРОВАТЬ:
Что касается Windows 7:
Вы пытаетесь что-то перезаписать в программе напрямую... это мера безопасности ОС, предотвращающая запись туда без прав администратора...

это может помочь в работе с UAC:

http://msdn.microsoft.com/en-us/library/bb756929.aspx
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/20acb8b9-8b9c-4a85-9416-fccdef579f10/
Windows 7 и Vista UAC - программно запрашивать повышение прав в C#

Другие вопросы по тегам