Перезапись DLL выдает Access Denied / Ошибка 5 в Windows 7 - PullRequest
1 голос
/ 31 июля 2011

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

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

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

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

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

Спасибо!

1 Ответ

0 голосов
/ 31 июля 2011

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

ЕСЛИ это не может быть объяснением ...

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

РЕДАКТИРОВАТЬ:Что касается 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 #

...