Разоблачение .Net Сервис - PullRequest
       18

Разоблачение .Net Сервис

5 голосов
/ 27 марта 2010

Я написал службу Windows в .Net и хочу предоставить классы для вызова другим кодом .Net. В частности, у меня есть API, который я хочу предоставить через DLL, которая будет помещена в GAC, и я хочу, чтобы DLL в GAC использовала классы .Net Windows Service. Мне нужна эта архитектура, так как код в Службе Windows должен запускаться от имени другого пользователя / учетной записи в качестве вызывающей стороны API (учетная запись будет создана во время установки).

Мой план состоял в том, чтобы выставить классы службы Windows через COM (regasm.exe для регистрации и tlbexp.exe для создания библиотеки типов), а затем вызвать классы в DLL-библиотеке GAC через COM (импортированные через tlbimp.exe). Однако я получаю следующую ошибку от tlbimp:

TlbImp: ошибка TI0000: System.Runtime.InteropServices.COMException - Библиотека типов '' была экспортирована из сборки CLR и не может быть повторно импортировано как сборка CLR.

Это подразумевает, что мой метод не сработает легко. Я могу только думать, что мне может понадобиться C ++ DLL в качестве моста для моей GAC DLL для вызова COM-вызовов, но это кажется неприятным решением.

Я в основном ищу предложения. Кто-нибудь знает, как открыть классы службы Windows, написанные в .Net, для другого кода .Net?

Ответы [ 2 ]

1 голос
/ 27 марта 2010
0 голосов
/ 27 марта 2010

Я бы поместил всю логику службы Windows в отдельную DLL (например, x.dll). Определите интерфейс для ваших классов в x.dll. Добавьте ссылку в службу Windows и другой проект .Net в проект x.dll. Таким образом, вы можете добиться повторного использования.

...