2010-11-23 3 views
5

У меня есть приложение, которое запускает другое приложение (мое основное). Пусковая установка переходит на FTP-сервер, загружает обновления и устанавливает их. Однако исполняемому файлу обновления необходимо скопировать некоторые библиотеки DLL и EXE в каталог установки основного приложения, которое находится в Program Files. Из-за этого мне в настоящее время необходимо повысить права обновления.Нужно поднять разрешения без всплывающих окон UAC

Это проблема, потому что мое приложение запускается при загрузке и, как правило, просто загружается в системный лоток (приложение сопоставимо с messenger/skype). Если я начну вызывать предупреждения UAC на экране при попытке «тихо» обновить приложение, это уже не так тихо.

Единственный способ, который я вижу сейчас, чтобы избежать проблемы, - предоставить всем пользователям права на установочный каталог программных файлов, но я не хочу этого делать. Любые другие идеи?

Я использую Windows 7, а приложения находятся на C#.

+3

Используйте запланированное задание, вы можете запустить их с учетной записью администратора. Обход состоит в том, что для их создания требуется повышенная учетная запись. – 2010-11-23 18:34:39

ответ

10

Это может нарушить основной принцип контроля доступа пользователей.

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


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

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

+0

Спасибо. Я думаю, что из моего вопроса было ясно, что я пытаюсь съесть пирог и оставить его целым, так как я не хочу разорвать UAC, но я хочу безмолвных обновлений. Тем не менее, мне очень нравится сервисное решение. Я мог бы пойти на это решение. – 2010-11-24 07:40:02

2

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

0

Как утверждают другие, UAC предотвращает такое поведение, однако вы можете отключить UAC, а затем включить постпостановку UAC, поскольку я предполагаю, что ваши «пользователи» являются локальными для вашего бизнеса. Вы можете нажать его в пакетном файле и выполнить его с помощью psexec, так как я считаю, что вы можете сделать это удаленно, не устанавливая ничего на клиентской машине.

Отключить UAC

C:\Windows\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f 

Включить UAC

C:\Windows\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 1 /f 
Смежные вопросы