Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Взгляд 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);
}
Элементы повышения являются процессами. Так, если я понимаю Ваш вопрос правильно, и Вы хотите способ поднять COM-объект в Вашем процессе, чем ответ - Вы, не может. Весь смысл CoCreateInstanceAsAdmin не должен выполнять его в Вашем процессе.
Я думаю, что CoCreateInstanceAsAdmin работает только в том случае, если вы заранее зарегистрировали компонент COM. Это может быть проблемой, если вы хотите, чтобы ваше приложение работало в настройках развертывания XCopy.
Для моих собственных целей в Gallio я решил создать небольшой процесс хостинга на стороне с манифестом, требующим прав администратора. Затем, когда мне нужно выполнить действие с повышенными правами, я запускаю экземпляр процесса хостинга и инструктирую его через удаленное взаимодействие .Net выполнить определенную команду, зарегистрированную в контейнере инверсии управления Gallio.
Это неплохая работа, но У Галлио уже есть внепроцессный хостинг, поэтому добавить возвышение в микс было не так уж сложно. Более того,