Клиент не будет общаться с ATL Service - PullRequest
0 голосов
/ 20 января 2009

У меня проблема с сервисом ATL, который экспортирует COM-объект. Он работает как локальная служба, но при работе в качестве службы Windows я не могу подключиться. Служба запускается правильно и работает, но мой клиент (код ниже) всегда дает сбой с ошибкой «Не удалось запустить службу».

Итак, мы смотрим на то же самое, я собрал минимальный проект, который воспроизведет эту проблему на моем ПК.

Файл-> Новый проект
Visual C ++ -> ATL "Проект ATL"
Название: "MyService"
В разделе «Настройки приложения» выберите «Служба (EXE)»

Перейти к «представлению класса»
Щелкните правой кнопкой мыши на «MyService» и выберите «Добавить» -> Class
выберите: «Простой объект ATL»
Краткое название: "MyObject"

Перейти к «Представлению решения»
Щелкните правой кнопкой мыши «Решение« MyService »и выберите« -> «Новый проект»
Это будет «Visual C ++» -> «Win32» «Приложение Win32 Console»
Название: "MyClient"
Установите флажок «Добавить общие заголовочные файлы для ATL»

В client.cpp используйте этот код:

#include "stdafx.h"
#import "../MyService/Debug/MyService.tlb"

#include <iostream>

using namespace MyServiceLib;

int _tmain(int argc, _TCHAR* argv[])
{
    ::CoInitialize( NULL );

    try
    {
        IMyObjectPtr spQueue( __uuidof( MyObject ) );
    }
    catch( const _com_error& Err )
    {
        std::wcout << L"Error: " << Err.ErrorMessage() << std::endl;
    }
    catch( ... )
    {
        std::wcout << L"Unexpected Error" << std::endl;
    }

    ::CoUninitialize();
    std::wcout << L"Finished" << std::endl;

    return 0;
}

Открыть «Зависимости проекта»
Проект "MyClient" зависит от "MyService"

Постройте решение.

В командной строке выполните следующие команды:
MyService / Service
net start MyService
клиент

Ответы [ 3 ]

1 голос
/ 20 января 2009

Выбираете ли вы опцию «Добавить общие заголовочные файлы для: ATL» в приложении MyClient? Это отлично работает в моем тесте.

Запустите службу под вашей учетной записью пользователя (по умолчанию системная учетная запись) для доступа при отладке в IDE.

Хороший замок.

0 голосов
/ 05 декабря 2014

В шаблонах реестра ATL есть ошибка (Visual Studio 2008/2010). В файле .rgs для компонента отсутствует значение AppID, как описано в этом блоге MSDN

Добавьте следующую строку над 'TypeLib ...' в MyObject.rgs

val AppID = s '%APPID%'
0 голосов
/ 23 января 2009

Возможно, вам потребуется внести дополнительные записи в реестр в разделе progid. Я не вижу, где вы звоните 'CoInitializeSecurity'

Microsoft предоставляет пример на http://msdn.microsoft.com/en-us/library/3ts2dxc8.aspx

-

Michael

...