1

この記事に従って、Windows サービスでホストされる WCF サービスを構築しました: http://msdn.microsoft.com/en-us/library/ms733069.aspx。サービスのコードが行うことの一部は、マルチキャスト グループに参加し、グループにブロードキャストされるデータをリッスンすることです。その後、それを処理します。InstallUtil を使用してサービスを手動でインストールすると、正常に動作することがわかりました。手動でインストールするには、次のようにします。

  • Visual Studio で MyService プロジェクトをビルドします。
  • Visual Studio コマンド プロンプトを右クリックし、[管理者として実行] を選択します。
  • MyService.exe ファイルがあるフォルダーに移動します。
  • 次のように InstallUtil コマンドを実行します。 installutil.exe MyService.exe

サービスは Windows に正常にインストールされ、開始します。次に、サービスのクライアントである ASP.NET アプリケーションを実行すると、問題なく動作します。サービスはデータを正常に受信して処理します。

ただし、Advanced Installerを使用して、サービスと ASP.NET アプリケーションを一度にインストールする MSI または EXE をビルドしようとしているので、手動で行う必要はありません。これを行う Advanced Installer プロジェクトを正常に作成でき、実際に ASP.NET アプリケーションと Windows サービスの両方が正常にインストールされ、Windows サービスも開始されます。しかし、本当に奇妙なことに、アプリケーションを実行すると、サービス コードがマルチキャスト データを受信できないことがわかりました。そのコード行でブロックされているようで、データを取得できません。なぜこれが起こるのか誰にも分かりますか?Advanced Installer のインストール時に、EXE を使用し、「管理者として実行」を使用しようとしました。これが私のサービスのコードです。

_groupAddress = IPAddress.Parse(_myIPAddress);
_listener = new UdpClient(_myPort);
_groupEP = new IPEndPoint(_groupAddress, _myPort);

_listener.JoinMulticastGroup(_groupAddress);
byte[] _bytes = _listener.Receive(ref _groupEP);

コードの最後の行でブロックされているようで、データをまったく受信しません。これは、Advanced Installer を使用してインストールした場合にのみ発生します。手動でインストールすると正常に動作します。

4

3 に答える 3

0

サービスは、ユーザーのIDで実行するように構成されています。異なる方法でインストールする場合、これは異なりますか?

どちらの場合も同じポート番号を使用しますか?そうでない場合は、ファイアウォールである可能性があります。

99%はチェック済みですが、高度なインストーラーを使用してインストールした後、サービスが実行されていることを確認してください。

イベントログでサービスの問題を確認してください。

于 2013-01-29T15:43:12.440 に答える
0

このアクションを実行するのに十分な資格情報で Windows サービスが実行されていない可能性があります。これをテストするには、サービスに使用されているユーザー アカウントを変更して、違いが生じるかどうかを確認することをお勧めします。

これを行うには、サービス アプレットに移動します (開始、実行、services.mscと入力します)。サービスを見つけて右クリックし、プロパティ、[ログオン] タブ、[このアカウント] を選択して、サービスを実行できる管理者ユーザー アカウントを選択します。

于 2013-01-29T15:46:43.440 に答える
0

これはユーザーの資格情報に問題があると彼らが言ったので、私は最初は考えました。しかし、どちらの場合もサービスが LocalSystem の下にインストールされていると言ったので、問題は別の場所にあるようです。

メッセージの開始に失敗したことに関するメッセージがないか、システムの「イベント ビューア」を最初に確認することをお勧めします。

そこに詳細が見つからない場合は、少しリバース エンジニアリングを行って、InstallUtil が何を行い、Advanced Installer が何を行わないか、またはその逆を確認することをお勧めします。Advanced Installer にはRepackager ツールが付属しています。このツールを使用して、「InstallUtil」の実行時に実行されたシステム変更をキャプチャできます。リパッケージャーがセットアップ パッケージ (メモ帳など) を要求しているときに、ダミーの実行可能ファイルを提供します。

Repackager がメモ帳を起動したら、メモ帳を開いたままにしてサービスのインストール コマンドを実行します。サービスのインストールが完了したら、メモ帳を閉じて、リパッケージャーの仕事をそのままにしておきます。次に、生成された新しいプロジェクトを分析して、ファイル、レジストリ、サービスなど、キャプチャされたリソースを確認します...

また、Advanced Installer によって作成されたインストール パッケージをキャプチャして、サービスのインストールによって作成されるサービスの登録情報が増減するかどうかを確認することもできます。

于 2013-01-30T08:11:32.867 に答える