Моя цель — создать COM-интерфейс в моей локальной службе Windows, написанной на C ++ / MFC, чьи методы можно вызывать из Windows Script Host
Код JScript, выполняемый под зарегистрированной интерактивной учетной записью пользователя.
Например, если у меня есть test.js
который может быть запущен с учетными данными вошедшего в систему пользователя, который выполняет следующие действия:
var Obj = new ActiveXObject("myservice.somename");
var Result = Obj.MyMethod("some data");
а затем есть MyMethod
функция обработана в моем сервисе & вернуть значение.
Я знаю, что это общая концепция. На данном этапе мне любопытно, возможно ли это (с точки зрения безопасности Windows, то есть вызова системной службы из пользовательского процесса) и, если да, есть ли какой-нибудь пример кода, который я могу использовать в качестве основы для этого?
Я предполагаю, что это должен быть какой-то интерфейс COM, верно? Но обычно они идут в DLL. Я никогда не пытался поставить их на службу.
Спасибо!
Я публикую его для собственного использования в будущем, несмотря на то, как я обращаюсь в комментариях к моему первоначальному сообщению. Это спасло бы мне день поиска, если бы кто-то указал мне на эту статью …
Эта статья CodeGuru «COM в простой C, часть 2«объясняет, как создать интерфейс COM, который может быть вызван из Windows Script Host
, Его IExample2
В проекте показано, как создать внутрипроцессную DLL-библиотеку, в которой размещается интерфейс COM, который можно вызывать из VBScript, включенного в тот же проект. затем regiexample2
а также unregiexample2
проекты также показывают, как зарегистрировать / отменить регистрацию интерфейса COM. VBScript можно легко настроить для работы с JScript в моем OP.
Одно предостережение, однако, этот проект предназначен для установки на 32-битную ОС. Для 64-битной ОС вам нужно будет собрать и зарегистрировать 64-битную версию In-proc COM Dll. Часть регистрации из 32-битного процесса похожа на показанную, за исключением того, что необходимо включить KEY_WOW64_64KEY
флаг при открытии / создании ключей реестра.