2013-12-11 5 views
2

Я уверен, что об этом раньше говорили и отвечали, но я не могу найти ответ, который я ищу. У нас есть несколько старых приложений VB6, и я пытаюсь запустить их в Windows 7. Они работают нормально, когда UAC отключен, но при работе с UAC на уровне по умолчанию «приложения генерируют (сталкиваются)« Запрошенная операция требует повышения », ошибка. Я понимаю, что я могу: а) отключить UAC или b) установить свойства программы «Запустить эту программу в качестве администратора»; но ... ни одно из них не является желательным. Мы хотим, чтобы на ПК был нормальный UAC, и мы НЕ хотим, чтобы «User Access Control: вы хотите разрешить программу и т. Д.» каждый раз, когда начинается наша программа. Наше приложение представляет собой программу типа «под ключ», клиент включает ПК и наши приложения запускаются. Когда я выбираю «Запускать эту программу в качестве администратора» для приложения, находящегося в папке «Автозагрузка», он больше не будет запускаться (как приложение автозапуска, я все равно могу запустить его из проводника (и получить UAC коробка)).Как заставить приложение работать с правами администратора

Итак .. Есть ли способ сказать Win7 запустить эту программу в качестве администратора и больше ничего не просить.

Я пробовал простой манифест (http://msdn.microsoft.com/en-us/library/bb756929.aspx), но это ничего не изменило.

Я действительно ищу что-то, что может быть выполнено с помощью установки Inno, какие-то настройки, которые я могу изменить, что позволит нашим программам читать/записывать реестр, запускать COM-объекты и выполнять все обычные вещи мы имели обыкновение делать.

Проблема не связана с установщиком «как администратор», но выполняется то, что мы устанавливаем «как администратор» (без щелчка правой кнопкой мыши и «ОК» каждый раз).

+4

Не было бы серьезным явлением безопасности, если бы вы могли обойти пользователя и решили, что ваше приложение работает как администратор? Весь смысл этой функции заключается в том, что приложения не запускаются с повышенными разрешениями без разрешения пользователя. – JohnFx

+0

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

+0

Если вы правильно приложили этот манифест, то при запуске приложения вы увидите приглашение UAC (при условии, что UAC включен). Пока это происходит, вы находитесь ближе всего к своей желаемой цели, не переписывая приложение «правильно» или требуя от пользователя отключения UAC (что иногда приемлемо [но нежелательно] для стиля под ключ приложение, но никогда для универсального приложения). – Miral

ответ

3

Что вы хотите сделать, это как бы противостоять тому, как работает ОАК, и ваше требование фактически не отличается от того, что требовалось зиллионам других людей, когда ОАК стал обязательным.

Что вы хотите, это абсолютно возможно, но для этого требуется, чтобы вы немного посидели и немного пересмотрели свою архитектуру приложений. Что вам нужно сделать, так это изолировать функциональность, требующую доступа уровня администратора, к службе Windows, после чего служба запускается под учетной записью Local System (что, возможно, немного более привилегировано, чем обычный администратор машины). Конечно, ваша служба также может быть настроена на автоматический запуск при запуске машины. Это означает, что код в сервисе получает повышенные привилегии, даже не запрашивая пользователя.

Остальная часть вашей функциональности может оставаться в вашем обычном приложении, работая под обычными учетными данными пользователя. Приложения, настроенные на автоматический запуск, запускаются значительно после служб, поэтому ваш сервис должен быть доступен к моменту запуска вашего обычного приложения.

+0

Даже это должно быть зарезервировано для особых случаев.По возможности лучше переработать ваше приложение, чтобы оно могло под стандартным пользовательским токеном в первую очередь. – Bob77

+0

Увидев, что это VB6, я собираюсь предположить, что для выполнения того, что вы описали, потребуется где-то около того же объема работы, чтобы просто прикрепить приложение к .net – NotMe

+1

@ChrisLively Да, это не тривиальная задача, приложение необходимо нарезать кубиками, и необходимо разработать межпроцессную связь. Я озадачен вашей ссылкой на перенос на .Net - это не решит проблему вообще. Если вы не имеете в виду, что весь код VB6 должен умереть? – slugster

Смежные вопросы