• 締切済み

NTサービスプログラムについて

現在、NTサービスのプログラミングを行っているのですが、SCMへ状態を通知するSetServiceStatus()で必ずエラーが発生し困っています。 原因をご存知の方はいらっしゃらないでしょうか? ///////////////////////////////////////////////// int WINAPI WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPTSTR lpszArgs,int nCmdShow) { // エントリテーブルの初期化 SERVICE_TABLE_ENTRY dispatchTable[] = { { "TEST SERVICE", (LPSERVICE_MAIN_FUNCTION)ServiceMain}, { NULL, NULL } }; // // レジストリにデータを格納する関数をコール     // // dispatchTableで設定したサービスを提供することをSCMに通知 StartServiceCtrlDispatcher(dispatchTable); } //////////////////////////////////////////////////////////////////////// SERVICE_STATUS_HANDLE sshStatusHandle; void WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv) { static DWORD dwCheckPoint = 1; // 制御ハンドラの登録 sshStatusHandle = RegisterServiceCtrlHandler("TEST SERVICE",ServiceCtrl); ssStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; ssStatus.dwServiceSpecificExitCode = 0; ssStatus.dwControlsAccepted = 0; ssStatus.dwCheckPoint = dwCheckPoint++; // SCMへ通知 SetServiceStatus( sshStatusHandle, &ssStatus); // サービススタート ServiceStart(dwArgc,lpszArgv ); // サービス停止をSCMに通知 return; }

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

>SetServiceStatus()で必ずエラーが発生し困っています。 どんな? GetLastError()でエラーを調べるのは当たり前です。 で、 1.根本的なところですが、サービスのインストールはできてるんですか? 2.「SCMへ通知」ってどんなステータスを通知するんですか?ssStatus.dwCurrentStateに何も入れていないような。 #とっても見覚えがあるようなソースです。 元の出所はここですかね? http://www.cisnet.or.jp/home/tsuneoka/win32sub/8.html サンプルもありますよ。

参考URL:
http://www.cisnet.or.jp/home/tsuneoka/win32sub/8.html
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • HINSTANCEの型

    LPSTR は char* なので、 int WINAPI WinMain(HINSTANCE hInstance ,HINSTANCE hPrevInstance , LPSTR lpCmdLine ,int nCmdShow ) を int WINAPI WinMain(HINSTANCE hInstance ,HINSTANCE hPrevInstance , char* lpCmdLine ,int nCmdShow ) と書き換えてもコンパイルできます。 HINSTANCEはvoid *型だという記述を見たのですが、void *で書き換えてもエラーがでてしまいます。 どうしたらよいのでしょうか。

  • lpCmdLineについて

    #include<windows.h> int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { MessageBox(NULL , lpCmdLine , TEXT("Kitty") , MB_ICONINFORMATION); return 0; } とやったのですが、lpCmdLineのパスが表示されません。なぜでしょうか?

  • C言語で黒い画面が出る

    gcc使ってC言語を勉強していますが、スタートmainをwindowsにしても黒い画面が出てきます。これを消すことはできませんか。やりたいことは単にメッセージボックスを表示して簡単なファイル入出力するだけです。ソースコードは以下 #include <windows.h> #include <tchar.h> int WINAPI WinMain( HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MessageBox( NULL, _T("Hello, Windows!"), _T("sample"), MB_OK); return 0; }

  • fwprintf()について

    テキストファイルに全角文字を出力したのですがなぜか出力するとテキストファイルには???と出力されてしまいます。 どうしたらちゃんと出力されるでしょうか? #include<windows.h> #include<TCHAR.h> int WINAPI _tWinMain(HINSTANCE hInstance,HINSTANCE hprevInst,LPTSTR nCmdLine,int nCmdShow) { FILE* fp; fp=_wfopen(_T("takoyaki.txt"),_T("w")); if(fp==NULL) { MessageBox(NULL,_T("ファイルが開きません"),_T("エラー"),MB_OK); } fwprintf(fp,_T("%s"),_T("おはよう。")); return 0; } 環境はWinXP pro、 開発環境はVC++2005です。 よろしくお願いします。

  • 外部シンボル "_main"は未解決です

    「LIBC.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です」というエラーが発生しましたが、何をみればいいのかわかりません。int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )がソースについています。

  • 画像が出力されません

    画像出力するには int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow); から引数"lpCmdLine"を使うことにより画像が出力できる事を聞いたのですが本当でしょうか? うまく出力できません どのようにしたらよいのか具体的にソースをつけて教えてください。 画像はraw画像で出力します

  • VS2019でWinMainエラー発生

    以下メッセージを表示するだけのプログラムですが、以前はビルドできたのですが、VS2019になってからWinMainで「整合性のないインスタンス・・・」とエラーが出ます。なんででしょうか。 お願いします。 またVCをVBSみたいに黒い画面が出ずに引数を使用したいですが、その他アドバイスもお願いします。 #include <windows.h> int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { MessageBox( NULL, TEXT("Hello, world!"), TEXT("Hello"), MB_OK | MB_ICONINFORMATION ); return 0; }

  • EXEでMessageBoxを作る方法

    Microsoft visual c++でメッセージボックスを作りました。 それをEXEの形にしたいのですが、どうすれば良いのでしょうか? 詳しく教えていただけるととても助かります。 ちなみに下記がVisual c++で作ったメッセージボックスのソースです。 #include<windows.h> int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { MessageBox(NULL , TEXT("how are you?") , TEXT("メッセージボックス") , MB_OK); return 0; }

  • 未解決の外部シンボル

    C言語は少しやっていたことがあり このたび、Winapiをしてみようと はじめました。 参考に見つけてきたプログラム #include <windows.h> #include <tchar.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd) { MessageBox( NULL, _T("Hello World"), _T("メッセージ"), MB_OK ); return 0; } をコンパイルしようとしたところ error LNK2019:未解決のシンボル __imp__MessageBoxA@16が関数_WinMain@16で 参照されました。 fatal errorLNK1120:外部1が未解決です。 と出てきます。 どうすればいいのでしょうか・・・ 困っています誰か助けてください Windows XP SP3 Visual Studio C++ 2008 Express Edition

  • 何もしないメッセージだけ表示するウィンドウ

    ゲーム用に何もしないメッセージだけ表示するウィンドウを作りたいのですが、 猫でもわかるゲームプログラミングのコードが間違っているのか、 機能しません。 #include <windows.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { return (int)msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg){ } return 0; } このように、打ち込んだのですが、どこが間違っているのか解りません。 回答お願いいたします。

このQ&Aのポイント
  • CANONプリンターG6030のインクボトル(PGBK)からインクを補充する際、インクタンク注入口に垂直に押し込んでもインクが入らない現象が発生しています。この理由と解決策を教えてください。
  • CANONプリンターG6030のインク補充時にインクタンク注入口に垂直に押し込んでもインクが入らない問題が発生しています。この問題の原因と解決方法を教えてください。
  • CANONプリンターG6030でインクボトル(PGBK)からインクを補充しようとしていますが、インクタンク注入口に垂直に押し込んでもインクが入らないという問題が発生しています。この問題の原因と解決策を教えてください。
回答を見る

専門家に質問してみよう