< FindFirstFile, FindNextFile, FindClose に関しての覚書 | IE をぎょうさん起動したいとき >

November 9, 2004

Service のデバッグ

サービスプログラムのデバッグがしたくて、 ServiceMain と、Handler 関数をエクスポートしてみた。
// MyService.def
EXPORTS
	ServiceMain
	Handler
さらに、テストプロを書いてみる
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>


#define MODULE_NAME         "MyService.exe"
#define FUNCNAME_MAIN       "ServiceMain"
#define FUNCNAME_HANDLER    "Handler"
int    main (int argc, char **argv)
{
    HMODULE     hModule    = NULL;
    char        szCurrent[MAX_PATH];
    char        szModule[MAX_PATH];
    DWORD       dwRet    = 0;

    LPSERVICE_MAIN_FUNCTION    lpfnServiceMain    = NULL;
    LPHANDLER_FUNCTION         lpfnHandler        = NULL;



    ZeroMemory (szCurrent, sizeof szCurrent);
    dwRet = GetCurrentDirectory (sizeof szCurrent, szCurrent);
    if (!dwRet)
    {
        fprintf (stderr, "GetCurrentDirectory err -->(%d)\n", GetLastError ());
    }
    else
    {
        ZeroMemory (szModule, sizeof szModule);
        wsprintf (szModule, "%s\\%s", szCurrent, MODULE_NAME);

        hModule = LoadLibrary (szModule);
        if (!hModule)
        {
            fprintf (stderr, "LoadLibrary err -->(%d)\n", GetLastError ());
        }
        else
        {
            lpfnServiceMain = (LPSERVICE_MAIN_FUNCTION) GetProcAddress (hModule, FUNCNAME_MAIN);
            if (!lpfnServiceMain)
            {
                fprintf (stderr, "GetProcAddress(ServiceMain) err -->(%d)\n", GetLastError ());
            }
            else
            {
                lpfnHandler = (LPHANDLER_FUNCTION) GetProcAddress (hModule, FUNCNAME_HANDLER);
                if (!lpfnHandler)
                {
                    fprintf (stderr, "GetProcAddress(Handler) err -->(%d)\n", GetLastError ());
                }
                else
                {
                    // とりあえず Handler をコールしてみた
                    lpfnHandler (SERVICE_CONTROL_CONTINUE);
                }
            }
            FreeLibrary (hModule);
        }
    }
    return 0;
}
結果は・・・呼び出せた。そんで動けば面白かったんだけど、サービスモジュール側でログ出力の処理がアクセスヴァイオレーションになってしまった。まあ、そううまくはいかないよね。一応、失敗談として。

トラックバック

このエントリーにトラックバック:
http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/727

コメント

コメントする

※ コメントスパム対策のため、コメント本文はおはよう、こんにちわ、こんばんわのいずれかより始めるようにしてください。

name:
email:

※ 必要ですが、表示しません。

url:
情報を保存する ?