Необходимо повысить разрешения без всплывающих окон UAC - PullRequest
5 голосов
/ 23 ноября 2010

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

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

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

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

Ответы [ 3 ]

11 голосов
/ 23 ноября 2010

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

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


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

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

2 голосов
/ 23 ноября 2010

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

0 голосов
/ 23 ноября 2010

Как уже говорили другие 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
...