Как к контролю учётных записей поднимают COM-компонент с.NET

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

15
задан Pierre Arnaud 10 February 2010 в 07:05
поделиться

3 ответа

Взгляд Windows Vista Пример кода

Демонстрации контроля учётных записей (Вам также нужно Мост Vista образец для UnsafeNativeMethods. Метод CoGetObject)

, Который дает Вам код C#, который показывает несколько различных способов поднять, включая COM-объект

(Неполный пример кода - захватывают файлы выше)

[return: MarshalAs(UnmanagedType.Interface)]
static internal object LaunchElevatedCOMObject(Guid Clsid, Guid InterfaceID)
   {
   string CLSID = Clsid.ToString("B"); // B formatting directive: returns {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} 
   string monikerName = "Elevation:Administrator!new:" + CLSID;

   NativeMethods.BIND_OPTS3 bo = new NativeMethods.BIND_OPTS3();
   bo.cbStruct = (uint)Marshal.SizeOf(bo);
   bo.hwnd = IntPtr.Zero;
   bo.dwClassContext = (int)NativeMethods.CLSCTX.CLSCTX_ALL;

   object retVal = UnsafeNativeMethods.CoGetObject(monikerName, ref bo, InterfaceID);

   return (retVal);
}
8
ответ дан 1 December 2019 в 04:41
поделиться

Элементы повышения являются процессами. Так, если я понимаю Ваш вопрос правильно, и Вы хотите способ поднять COM-объект в Вашем процессе, чем ответ - Вы, не может. Весь смысл CoCreateInstanceAsAdmin не должен выполнять его в Вашем процессе.

2
ответ дан 1 December 2019 в 04:41
поделиться

Я думаю, что CoCreateInstanceAsAdmin работает только в том случае, если вы заранее зарегистрировали компонент COM. Это может быть проблемой, если вы хотите, чтобы ваше приложение работало в настройках развертывания XCopy.

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

Это неплохая работа, но У Галлио уже есть внепроцессный хостинг, поэтому добавить возвышение в микс было не так уж сложно. Более того,

3
ответ дан 1 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: