36

サービスとして実装する必要がある既存の GUI アプリケーションがあります。基本的に、Windows 2003 サーバーにリモートでログオンおよびログオフし、このプログラムを引き続き実行できる必要があります。

これは可能ですか?

編集:ここでさらに改良します...ソースがありません。それは私のアプリケーションではありません。

4

11 に答える 11

19

Windows サービスは GUI を持つことができないため、GUI を取り除くか、アプリケーションを 2 つの部分 (UI のないサービスと「コントローラー」アプリケーション) に分割する必要があります。ソース コードがあれば、非 GUI コードをサービスに変換するのは簡単です。Visual Studio には、ラッピングを処理する「Windows サービス」プロジェクト タイプがあり、作成方法を示す簡単なチュートリアルがあります。インストールを処理する展開プロジェクト。

2 番目のルートを選択し、元の GUI コードの一部をコントローラーに配置する必要がある場合、コントローラーとサービスは、WCF、.NET Remoting、または独自に定義したプロトコルを使用したプレーン ソケット接続を介して通信できます。Remoting を使用する場合は、できるだけ少ないメソッド呼び出しでデータを転送する「分厚い」インターフェイスを必ず使用してください。各呼び出しにはかなりの量のオーバーヘッドがあります。

UI が非常に単純な場合は、入力ファイルとログ ファイルに構成ファイルを使用したり、出力に Windows イベント ログを使用したりして問題を解決できる場合があります。

于 2008-09-10T02:42:24.330 に答える
7

Always Upのようなサードパーティ製品を使用した人はいますか?

私が必要とすることをしているようです。私が必要とするログイン/ログアウトサイクルを実行し続ける機能です。そして、それが GUI アプリであることを無視して実行する機能。

それらは手動でexeにリンクし、WinMainまたは何かを呼び出す必要があります。

于 2008-09-10T11:31:58.957 に答える
5

srvanyにまとめることができますが、実際のユーザー アカウントを割り当てる必要がある場合があります (LocalService などではなく)。

于 2008-09-10T00:40:58.647 に答える
2

実際にサービスとして実行する必要がありますか、それとも接続していないときに実行し続ける必要があるだけですか? 後者の場合、ログオフする代わりに切断でき、アプリケーションは引き続き実行されます。[シャットダウン] を選択すると、オプションがドロップダウン リストに表示されるか、tsdiscon.exe を呼び出すことができます。

于 2011-02-28T21:04:22.467 に答える
0

ソースはありますか?多くの場合、スタンドアロンアプリケーションとサービスの違いはごくわずかです。

ほとんどの変更は、コードをサービスマネージャーに適切にフックすることに関連しています。完了すると、発生する問題はプログラミングの結果であり、他のプログラムの結果ではないことがわかります。

于 2008-09-10T01:34:39.440 に答える
0

サービスを作成するとどうなりますか。そのサービスは、デスクトップと対話するように構成されています。一部のユーザーを実行し、自動で開始するように構成します。この他のアプリケーションのサービスCreateProcessから。これはC#を使ってすぐに試すことができると思います(C / C ++は、思い出すとサービスになるためのコードがたくさんありました)。それはうまくいくでしょうか?

しかし!

私が最初に考えたのは、サーバークラスの仮想ホスト(Virtual Server、HyperV、VMWareなど)に仮想コンピューターを作成することです。これらの仮想マシンは、サービス(またはHyper Vが実行するもの)として実行されます。ログインとログアウトに関係なく、仮想マシンは常に実行されます。

この仮想コンピューターをWindowsに自動ログインさせ(TweakUIで設定できます)、スタートアップフォルダーへのショートカットを使用してGUIアプリを起動します。プログラムのGUIを使用してリモートデスクトップにアクセスすることもできます(Always Upではそれができないと思います)。

于 2008-09-11T20:23:03.727 に答える
0

ServiceMillを使用して、この操作を実行できます。基本的に、ServiceMillサーバーをサーバーにインストールします。次に、実行可能ファイルの上で右ボタンをクリックし、[ServiceMillサービスとしてインストール]をクリックします。次に、いくつかの設定を行います(ユーザー/パスワード、デスクトップを操作する場合、またはUIを非表示にする場合は、...開始モードを自動に設定します)。

Active+Softwareの別のツールはソリューションであるServiceMillExeBuilderであり、コマンドラインからサービスを作成できます。これは、継続的インテグレーションサーバーを使用している場合、またはコンポーネントをサービスとして配布する場合に最適です。サービス統合(さらに、ロイヤリティフリーです)。

于 2012-05-01T14:22:12.213 に答える
0

FireDaemonProはほとんどの GUI アプリをサービスに変えます。無料ではありませんが、入手する価値はあります。

于 2016-11-27T02:16:22.467 に答える
-1

最初に、あなたのサービスにユーザー インターフェイスが必要な理由を尋ねなければなりません。ほとんどの場合、そうではありませんが、このサービスからデータを取得するクライアントが必要になる可能性があります。通常、サービスに GUI がない理由は、実行するためのウィンドウ環境がない可能性があるためです。サービスは、ユーザーがマシンにログインしなくても開始および実行できます。この場合、サービス GUI を実行するためのデスクトップはありません。

マークが提案したように、ユーザーとして実行するようにサービスのプロパティを設定できると言いました。サービスのプロパティで、「デスクトップとの対話をサービスに許可する」を指定することもできます。これは、ユーザーがログインすることがわかっている場合にのみ行ってください。

于 2008-09-10T02:54:46.250 に答える
-1

ユーザーの介入を必要とせずに実行する必要があり、適切なユーザーのデスクトップを見つけて通信することに関連するあらゆる種類の問題があるため、サービスには GUI があってはなりません。

おそらくこれを要求する理由は、アプリケーションをリモートで監視できるようにするためであるため、それを行う方法は 2 つのアプリケーションを用意することです。サービス側 (基本的にはコンソール アプリケーションとして記述) とクライアント/監視 GUI 側です。このサービスは、クライアント/監視アプリケーションと通信するためにリモート接続 (私がこれを行うときは名前付きパイプを使用しました) を使用します。いずれかが他方なしで実行できる必要があり、確かにサービスはクライアントなしで実行できる必要があります。

于 2008-09-10T04:28:02.923 に答える