Запуск приложения, которое требует учетной записи администратора от службы - PullRequest
2 голосов
/ 29 декабря 2010

Можно ли запускать handle.exe (из sysinternals) из службы (в windows7) без необходимости отключения UAC? ​​

Служба - это настраиваемое c-приложение, которое должно выяснить, какой процессблокирует файл, к которому он пытается получить доступ, и handle.exe кажется хорошим способом его решить, но я не могу заставить его работать с включенным UAC.Это приложение работает все время, поэтому я не могу получить приглашение UAC во время его работы, но оно нормально, если оно появляется при запуске.

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

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

Ответы [ 2 ]

1 голос
/ 29 декабря 2010

Возможно, вы захотите взглянуть на метод Win32 API CreateProcessWithLogonW. Существует также сценарий повышения уровня VBS, из которого вы можете узнать: http://technet.microsoft.com/en-us/magazine/2007.06.utilityspotlight.aspx

1 голос
/ 29 декабря 2010

UAC не влияет на сервисы (он влияет только на интерактивные сеансы), поэтому он должен работать.

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

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

  2. С другой стороны, если это единственныйместо, где ваша программа нуждается в правах администратора, может иметь смысл создать COM DLL, которая обернет ваш вызов Handle.exe (или любую другую работу администратора), чтобы вы могли использовать UAC для выполнения повышенных вызовов этой функции из вашего приложения без прав доступа,Затем вы будете вызывать запрос UAC каждый раз, когда создаете (повышенную версию) этот COM-объект.Вы можете держать COM-объект открытым так долго, как вам хочется, и создавать его в любое время, поэтому когда и как часто будут появляться запросы UAC, все равно остается за вами.

Как 1, так и 2 являются стандартным использованием UAC, поэтому в любой хорошей документации или руководстве по UAC будет подробно описано, как их выполнять.

...