2010-12-29 2 views
2

Возможно ли запустить handle.exe (из sysinternals) из службы (в Windows 7) без необходимости отключать UAC?Запуск приложения, требующего учетной записи администратора из службы

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

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

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

+0

«Настройка службы для входа в систему из учетной записи администратора не работает». - Вы имеете в виду, что служба не запустится вообще, или вызов Handle.exe каким-то образом завершится, или? –

+0

Я имею в виду, что это не решило проблему. – Bergvall

ответ

1

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

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

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

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

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

1

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

+0

Не запускает ли это запрос UAC каждый раз, когда запускается Handle.exe? В этом вопросе говорится, что это нежелательно. Или вы хотите поднять всю программу (а не только вызовы Handle.exe)? Но в этом случае вы можете просто отметить программу как требующую администратора через свой манифест. –

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