13

この問題は広く議論されているようですが、私の特定のケースでは解決策を見つけるのに問題があります。

私のサービスは、アカウントで実行されるように設定されていLocal Systemます。Windows 7 SP1 (64 ビット)がインストールされた最初のマシンでは、すべてが期待どおりに動作します。しかし、 Windows Server 2008 R2 SP1 (64 ビット)を搭載した 2 台目のマシンでサービスを開始しようとした直後に、1 秒も経過せず、次の厄介なエラーに直面しています。

Windows could not start the ProService service on Local Computer
Error 1053: The service did not respond to the start or control request in a timely fashion

System Logは 2 つのエントリが表示されます。

The ProService service failed to start due to the following error: 
The service did not respond to the start or control request in a timely fashion.

と:

A timeout was reached (30000 milliseconds) while waiting for the ProService service to connect.

実装は次のようになります。

Program.cs:

static void Main()
{
    AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;
    ServiceBase.Run(new ServiceBase[] { new ProService() });
}

static void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    if (e != null && e.ExceptionObject != null)
    {
        Logger.Record(e.ExceptionObject);
    }            
}

ProService.cs:

public ProService()
{
    InitializeComponent();
}

protected override void OnStart(string[] args)
{
    try
    {
        RequestAdditionalTime(10000);
        FireStarter.Instance.Execute();
    }
    catch (Exception e)
    {
        Logger.Record(e);
        throw;
    }            
}

メソッドは新しいスレッドを開始するOnStartだけなので、実行にほとんど時間がかかりません。RequestAdditionalTime念のため、この問題を問題の原因として拒否するためにステートメントを使用しました。さらに、ご覧のとおり、すべての例外を処理していますが、起動時にカスタム サービス イベント ログに例外が書き込まれることはありません (ところで、ログは最初の win7 マシンで動作しています)。何が起こっているのかを調査する方法は?

4

5 に答える 5

10

私はいくつかのステップで何が起こっているのかを理解しました:

  1. 私はOnStart、サービスからメソッドで基本的に行われるコンソール アプリケーション - ラッパーを作成しました。
  2. コンソール アプリケーションを実行しました - アプリケーションは正常に起動しました。
  3. サービス構成ファイルの内容をコンソール アプリケーション構成ファイルにコピーしました。
  4. コンソール アプリケーションをもう一度実行しました。アプリケーションは黙ってすぐに中止されました (驚くべきことに、サービスの動作と似ていますが、何かがおかしいのです)。
  5. サービスからの構成と、コンソール アプリケーションからのオリジナルの 2 つの構成を比較しました。その結果、いくつかの違いが見つかりました。とりわけ、そのようなエントリがありました-問題の原因(削除後、すべてが機能します):

    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    

基本的に、古い構成ファイルがありました。以前はサービスが .NET 4.5 でコンパイルされていたので、フレームワークを 4.0 に変更し、ファイルをサーバーにデプロイしましたが、以前の構成ファイルは残しました (私の開発マシンには .NET 4.5 があり、サーバーには .NET 4.5 があるため、ターゲット フレームワークを変更しました)。いいえ)。混乱を追跡するのに役立つ合理的な情報がなければ、示されている行がすべての問題を隠しているとは思わなかったでしょう。

于 2013-01-04T09:08:44.040 に答える
2

不足している依存関係/DLL を確認します。

まだ行っていない場合は、サービスを通常のアプリケーションとして呼び出すことを許可し (長期間のデバッグに最適な手法です)、Windows 2008 マシンでサービスが適切に起動するかどうかを確認してください。

そのように動作する場合は、LocalSystem アカウントでの実行に問題がある可能性があります。LocalSystem アカウントで実行されているコマンド プロンプトからアプリケーションを起動する手順に進みます (セットアップ例はこちら)。

于 2013-01-02T14:53:44.737 に答える
1

このリンクで提供されている次の修正を試しました

  1. [スタート]、[ファイル名を指定して実行] の順にクリックし、「regedit」と入力して、[OK] をクリックします。

  2. 次のレジストリ サブキーを見つけてクリックします: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control

  3. 右側のペインで、ServicesPipeTimeout エントリを見つけます。
    注: ServicesPipeTimeout エントリが存在しない場合は、作成する必要があります。これを行うには、次の手順を実行します
    。[編集] メニューの [新規] をポイントし、[DWORD 値] をクリックします。
    b. ServicesPipeTimeout と入力し、Enter キーを押します。
  4. [ServicesPipeTimeout] を右クリックし、[変更] をクリックします。
  5. [10 進数] をクリックし、60000 と入力して、[OK] をクリックします。
    この値は、サービスがタイムアウトするまでの時間をミリ秒単位で表します。
  6. コンピュータを再起動します。

しかし、それでもサービスを開始するには問題がありました。

私のために働いた修正は、

  1. services.msc に移動します。
  2. 開始しようとしているサービスをダブルクリックします。
  3. [ログオン] タブを使用する
  4. Log on as: を Local System アカウントに変更しました。
  5. この変更後にサービスを開始しようとしました。(それでも 1053 エラーが発生しました)
  6. [ログオン] タブを再度取得し、[ネットワーク サービス] に変更しました (ランダムな新しいパスワードを指定しました)。
  7. 再度サービスを開始してみました。 (サービスは完全に開始されました)
于 2013-10-31T15:08:41.047 に答える
0

サービスをインストールした後、インストール フォルダーにフル コントロールのアクセス許可 (Everyone) を与える必要があります。その後、私のサービスは完全に開始されます。

于 2015-08-03T13:20:46.343 に答える
0

以下の手順を試しました。それは魅力のように機能しました。

1. services.msc に移動します。 2. 開始しようとしているサービスをダブルクリックします。3. [ログオン] タブを開きます。 4. [ログオン] を [ローカル システム アカウント] に変更しました。5.この変更後、サービスの開始を試みました.(それでも1053エラーが発生しました) 6.[ログオン]タブを再度取得し、ネットワークサービスに変更しました(ランダムな新しいパスワードを指定しました) 7.サービスの開始を再試行しました.(サービスが開始されました完璧に)

しかし、何が問題になるのか知りたいだけです。

于 2015-07-15T08:14:24.300 に答える