0

COM オブジェクトをエクスポートする ATL サービスに問題があります。ローカル サービスとして実行すると動作しますが、Windows サービスとして実行すると接続できません。サービスは正しく開始して実行されますが、クライアント (以下のコード) は常に「サービスの開始に失敗しました」というエラーで失敗します。

同じことを見ているので、PCでこの問題を再現する最小限のプロジェクトをまとめました.

[ファイル] -> [新しいプロジェクト
Visual C++] -> ATL "ATL プロジェクト"
名前: "MyService"
[アプリケーションの設定] で、[サービス (EXE)] を選択します。

"クラス ビュー" に
移動し、"MyService" を右クリックして追加 -> クラス
を選択: "ATL シンプル オブジェクト"
短縮名: "MyObject"

「ソリューション ビュー」に移動し、「
ソリューション 'MyService'」を右クリックして追加 -> 「新しいプロジェクト」
これは「Visual C++」 -> 「Win32」 「Win32 コンソール アプリケーション」
名前: 「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
クライアント

4

3 に答える 3

1

アプリ MyClient で「共通ヘッダー ファイルの追加: ATL」オプションを選択していますか? これは私のテストではうまくいきます。

IDE のデバッグ時にアクセスできるように、ユーザー アカウント (デフォルトはシステム アカウント) でサービスを実行します。

いいロック。

于 2009-01-20T18:10:20.337 に答える
0

progid の下に追加のレジストリ エントリを作成する必要がある場合があります。「CoInitializeSecurity」を呼び出している場所がわかりません

Microsoft は、 http://msdn.microsoft.com/en-us/library/3ts2dxc8.aspxで例を提供しています 。

--

マイケル

于 2009-01-23T19:22:16.823 に答える