Как я могу получить повышенные разрешения (UAC) посредством олицетворения при неинтерактивном входе в систему?

У меня есть библиотека классов, которая хранит общесистемные данные конфигурации в реестре (HKLM \ Software \ XXX). Эта библиотека используется в различных приложениях (службах, формах Windows, веб-приложениях, консольных приложениях) в различных версиях Windows (XP, 2003, 7, 2008 R2). Из-за этого удостоверение приложения не согласовано и может даже не входить в группу администраторов компьютера. Итак, я создал пользователя с правами администратора домена AD и выполняю олицетворение, чтобы получить доступ на запись в реестр. Это отлично работает в XP / 2003, но не в системах с поддержкой UAC (7 / 2008R2). Насколько я понимаю, только интерактивные логины разделяют токены, что подразумевает, что неинтерактивные входы (идентификаторы служб, идентификаторы пула приложений и т. Д.) Этого не делают. Я не могу найти ничего, чтобы подтвердить это, но, исходя из этого предположения, олицетворение, которое я делаю, должно работать.

Я написал класс-оболочку для олицетворения с использованием собственного LogonUser (тип входа в сеть, поставщик по умолчанию) и DuplicateTokenEx ( олицетворение, первичный токен), затем WindowsIdentity.Impersonate (). Я получаю ссылку на свой корневой ключ:

using (ECR.Impersonator imp = new ECR.Impersonator("XXX", "XXX", "XXX"))
{
    _root = Registry.LocalMachine.CreateSubKey("SOFTWARE\\XXX", RegistryKeyPermissionCheck.ReadWriteSubTree);
}

Согласно MSDN , при использовании ReadWriteSubTree это должен быть ЕДИНСТВЕННЫЙ раз, когда выполняется проверка безопасности. Я могу записывать значения в этот ключ, создавать подключи (также используя ReadWriteSubTree) и записывать значения в эти подключи без необходимости повторной проверки безопасности. {попробуйте {DoSomething (); } catch (Exception e) {// делаем что-то с e} Я бы предпочел ...

Я работаю над XML-файлом макета и хочу установить цвет фона для LinearLayout. Этот бит, который я сейчас использую, работает отлично:

android:background="#1a64b7"

Однако я бы предпочел отказаться от него. В моем файле strings.xml у меня есть

#1a64b7

, но когда я использую его следующим образом:

android:background="@string/bg_blue"

он отлично отображается в предварительном просмотре графического макета в Eclipse, но приложение вылетает, как только открывается. Есть идеи? Большое спасибо.

Ник

7
задан Nick 23 February 2011 в 22:42
поделиться