2017-10-16 4 views
1

私はこのプログラムをしばらく開発しています... ITチームの資産管理者として(そして将来的にはもっと)機能することを意図しています。私は2つのサービスを持っていますが、今は "マネージャー"と "IAM"と呼ばれています。 「マネージャ」は、資産管理者がその仕事をしている間に、自動更新などのすべてのサービス(現在は「IAM」と呼ばれる唯一の在庫資産マネージャー)すべてを管理します。開始時にucrtbase.dllでWindows C++サービスのフォールトが発生する

とにかく、それは今、しばらくの間うまくいっています。最近私は自動更新機能を実装しました(実際にはまだテストが必要であり、デバッグされる可能性があります)。これを実行している間、私は自分の命名を一貫させる必要がありました(例えば、 "Updater"と "CppWindowsService"から私のサービスの名前をソフトウェアの実際の名前に変更する)。

これまでは、うまくいっていました!何も起こらずに起動、停止、インストール、およびアンインストール。私はすべての名前を変更し、すべてがコンパイルされていることを確認します。いいね。 「マネージャー」と「IAM」今の両方のための素晴らしい作品をインストールし、しかし、すぐに私はそれを起動しようとして、私が手:私がしようとすると、

はをStartServiceは、また

を(1053)が失敗しましたservices.mscから起動すると、次のエラーメッセージが表示されます。

Windowsはローカルコンピュータ上でサービスを開始できませんでした。

エラー1053:そのサービスは指定時間

このかかわらについて奇妙なことに開始要求または制御要求に応答しませんでしたが、それは、タイムアウトの任意の並べ替えを待たないということです。それはすぐにメッセージを吐き出します。そのメッセージは私のwmain()(Windowsのエントリーポイントでなければmain())から呼び出されたコードから来ます。

if (!StartService(
     schService, // handle to service 
     0,   // number of arguments 
     NULL))  // no arguments 
    { 
     printf("StartService failed (%d)\n", GetLastError()); 
     CloseServiceHandle(schService); 
     CloseServiceHandle(schSCManager); 
     return; 
    } 
    else printf("Service start pending...\n"); 

Windowsイベントログでは、フォルト後に次の詳細を含むアプリケーションエラーが発生します。

アプリケーション名をフォールティング:InITManager.exe、バージョン:0.0.0.0、タイムスタンプ:0x59e11e44

フォールティングモジュール名:ucrtbase.dll、バージョン:10.0.15063.674、タイムスタンプ:0x8ac9f9d4

例外コード:0xc0000409

オフセット障害:0x000000000007350e

断層プロセスID:0x3008

アプリケーションパスをフォールティング0x01d346915918e17d

エラー発生アプリケーション開始時刻 C:\ Users \ユーザーcollin.walker \デスクトップ\ InITService \ C++ \ x64の\リリース\ MANAGER.EXE

フォールティングモジュールパス:Cを:\ WINDOWS \ System32 \ ucrtbase。DLL

レポートイド:7fcbdcc4-be8e-476A-960f-4fa1fb21f892

断層パッケージフルネーム:

断層パッケージ相対アプリケーションID:

その他の情報:ucrtbase.dllがありますVisual Studioで使用され、リリースビルドに関連付けられています。ここで、ucrtbased.dllはデバッガビルドに関連付けられています。私はリリースモードでビルドしています。

今、私の問題は私のコードではないと言われていますが、誰かがそれを見る必要があると感じたら、それを含めます。その非常に簡単なC++ winapiのものです。

この問題を解決する方法について他にご意見がありましたら、私にお知らせください、事前にすべてのヘルプに感謝してください!

+0

ucrtbase.dllとは関係ありません。単に悪いニュースの持ち主に過ぎません。 0xc0000409は厄介な例外です。コードがスタックフレームを破損すると発生します。最も一般的には、あなたが多すぎるcharをコピーするchar []ローカル変数です。共通の事故で、コードを別のマシン上の本番環境で確実に稼働させることは、プロジェクトの90%です。それが起こったときにブレークを取得するために接続されたデバッガでそれを実行します。 –

+0

@HansPassant、 'ucrtbase + 7350e'は、CRTの[' abort'](https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/abort)関数のint 0x29命令です。これは['KERNEL_SECURITY_CHECK_FAILURE']([https://docs.microsoft.com/en-us/cpp/intrinsics/fastfail])の[' __fastfail'組み込み関数]です(https://docs.microsoft.com/en-us/cpp/intrinsics/fastfail) FAST_FAIL_FATAL_APP_EXIT'(7)というコードで、/ windows-hardware/drivers/debugger/bug-check ---バグチェック-0x139-kernel-security-check-割り込みは 'KiRaiseSecurityCheckFailure'によって処理され、' STATUS_STACK_BUFFER_OVERRUN'(0xC0000409)が発生します。 – eryksun

+0

素晴らしい、それはトンを助ける!ありがとうございました!私はすべての助けに感謝します! (ない/ s) – TheEggSample

答えて

0

私のトラブルシューティング中にこのポストを忘れてしまった...とにかく、私はそれを理解しました。上記のコメントが掲載されました!

私の場合、サービスの名前を変更すると、プログラムのディレクトリ名が変わってバッファオーバーフローが発生しました。エラーは、サービスのコンストラクタでログオブジェクトを初期化していたときに発生していました。私はコンストラクタに2行のコードしかないので、そこを見るのを忘れてしまった。ログが作成されたハードコードされたディレクトリの場所が変更され、すべてがうまく動作し始めました!役に立つ情報をお寄せいただきありがとうございます!

関連する問題