Компания, в которой я работаю, написала исполняемый файл .net 3.5 для одного из наших клиентов, который предназначен для предоставления пользователю рабочей станции Windows всплывающего окна, отображающего соглашение с конечным пользователем и «принять» или «отклонить». кнопка. Если пользователь нажимает «Принять», то процесс отключается, и в мире все хорошо. Однако если пользователь «отклоняет» соглашение с конечным пользователем, приложение остается в памяти и создает средство наблюдения за событиями, которое отслеживает результаты от запроса WMI к «Win32_ProcessStartTrace». Приложение проверяет XML-файл, который содержит имена определенных приложений, которые не могут быть запущены на рабочей станции пользователя, если они не примут соглашение с конечным пользователем. Проблема, с которой мы столкнулись, заключается в том, что приложение отлично работает в Visual Studio 2010 под учетной записью администратора, но не работает при развертывании на пользовательской рабочей станции, поскольку пользователи не имеют прав локального администратора.
Приложение развертывается путем создания задачи Windows 7, которая запускается при входе пользователя в систему.
Я уже пытался создать задачу, используя учетную запись локального администратора и устанавливая параметры безопасности для запуска под локальным администратором, и установил флажок «Запускать с наивысшими привилегиями», но не смог заставить это работать.
В конечном итоге мой вопрос заключается в том, как заставить этот исполняемый файл запускаться с правами администратора на рабочей станции, которая используется пользователем без прав администратора. Другое ограничение заключается в том, что мы не можем запустить это в службе Windows, потому что клиент не хочет, чтобы приложение оставалось в памяти.
Я также хочу добавить, как мы в настоящее время называем наш WMI ManagementScope
объект
ManagementScope scope = new ManagementScope("root\\CIMV2");
scope.Options.EnablePrivileges = true;
scope.Options.Impersonation = ImpersonationLevel.Impersonate;