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
コメント