2

そこで、C#を使用してWindowsサービスを作成し、そのためにVisualStudioでインストーラーを作成しました。常に実行したくないので、手動で実行するように設定されています。次に、サービスのオンとオフを切り替えるオプションを持つ別のアプリケーション(C#WPF)があります(サービス自体がWebサービスを作成し、それがWPFアプリケーションと通信します)。これはWindowsXPでは正常に機能しますが、Windows 7マシンでテストすると、起動しません。驚いたことに、それは例外をスローしてクラッシュしますが、何もしません。これは権限の問題だと思います。同じWindows7アカウントを使用してサービスのコントロールパネルに移動すると、サービスを開始または停止することもできません。

だから私の質問は、通常のユーザーアカウントがサービスを開始および停止できるようにサービスを設定する方法はありますか?そして、これを自動的に行うようにインストーラーを設定する方法はありますか?

WPFアプリケーションを管理者として実行したくありません。

4

2 に答える 2

2

通常のユーザーがサービスを開始および停止できるようにサービスを確保することは可能であると思いますが、そうすることはお勧めしません。これは多くの合併症を引き起こし、混乱の潜在的な原因となります。特にインストールとセキュリティに関しては、常に物事をシンプルに保つことを好みます。

したがって、ユーザーにサービスの開始と停止を許可できない場合は、サービスを常に実行させる必要があります。サービスを常にアクティブにしたくないので、サービスに独自の内部Runningフラグを設定することをお勧めします。これがtrueに設定されている場合、サービスはアクティブでビジーな処理を実行します。それ以外の場合、サービスはアイドル状態のままです。好みのIPCメカニズム(ソケット、名前付きパイプ、WCFなど)を使用して、ユーザーがこのスイッチを切り替えることができるようにすることができます。

于 2012-04-18T14:33:05.103 に答える
1

Windows 8には、基本的にある種のトリガーに応答して、サービスをオンデマンドで開始できるようにする機能があります。ただし、Windows 7の場合、唯一の実際のオプションは、起動時に自動的に起動するように設定することです。開始を遅らせるように設定して、ウィンドウの開始にかかる時間に追加されないようにすることができます。

通常のユーザーはサービスを開始および停止できません。

編集:上のコメントのリンクを読むことは、ユーザーがサービスを開始および停止するための包括的な機能であるため、私には聞こえます。ここでの質問は、特定のサービスに対してこれを行う方法についてだと思います。

また、サービスをその特定のユーザーとして実行するように設定することは可能かもしれませんが、実際には、その特定のユーザーに対してのみ機能し、ワークステーション上の他のユーザーはアプリケーションを使用できないため、アプリケーションを使用できません。ユーザーとして実行されているサービスが、ユーザーがサービスを制御できることを意味していると仮定して、サービスを開始または停止しますが、そうではない場合があります。

また、コメントやその他の回答を読んでいると、アプリケーションを実行できるすべてのユーザーがこのサービスを使用できるかどうか疑問に思います。つまり、ユーザーAがワークステーションにログオンしてこのアプリ(したがってサービス)を起動し、ロックして立ち去った場合、ユーザーAがログオンして同じサービスを実行しようとするとどうなりますか?サービスは同時に複数のユーザーをサポートできますか、またはサービスが複数回実行されているアプリケーションによって利用されると、面白いことが起こり始めますか。

これは、アプリケーションの起動時にバックグラウンドを開始することが望ましいように思えます。このスレッド(または複数のスレッド)はサービスの作業を実行し、その性質上、アプリケーションが終了すると終了します。もちろん、質問の詳細は、より良い答えを与えるのに役立ちます。

もちろん、サービスとして適切であれば、スリープするワーカースレッドと、実行する作業があるかどうかをチェックするプロデューサーとして機能する別のタイマースレッドを使用してサービスを提供しない理由はありません。

于 2012-04-17T20:49:38.890 に答える