1

多くのソフトウェアは、一緒にインストールされた Windows サービスによって更新されることを知っています。クライアント アプリケーションの更新ヘルパーおよびデータ サーバーとして機能するサービスを作成しました。しかし、このサービスからクライアント アプリケーションを制御する方法に行き詰まっています。

まず、私のサービスはリモート サーバー上の更新をチェックし、次にファイルをダウンロードします。

ニュースをクライアントにブロードキャストし、クライアントはユーザーに今すぐ更新するか、次の実行を行うかを尋ねます。

更新時に、クライアント アプリケーションは自身の実行可能ファイルを削除することはできません。そのため、実行していないときにサーバーに実行を要求し、ファイルの削除と名前の変更が完了すると、クライアント アプリケーションは再度実行します。クライアントを実行します。

サービスがセッション 0 にある場合、同じユーザー セッションに対してクライアントを再実行できませんでした。

もう 1 つの考えられる問題は、サービスそのものを更新する必要がある場合です。それ自体ではなく、クライアントによって更新されることで解決される可能性があります。

そのため、クライアントとサーバーを更新する場合、ジョブを実行するために 3 つ目のアプリケーションを作成する必要があります。この 3 つ目のアプリケーションがコンソール アプリであれば、サービスから実行しても問題ありませんよね。

この 3 番目のアプリを含まないソリューションがあれば、それが最適です。


ノート:

このサービスは単なる更新サービスではなく、ユーザーのアクセスと権限を通知するサーバーです。メインのクライアント アプリケーションはuser information database直接アクセスしません。

4

1 に答える 1

8

サービスがセッション 0 にある場合、同じユーザー セッションに対してクライアントを再実行できませんでした。

CreateProcessAsUser()はい、アプリを実行するユーザー アカウントとデスクトップを指定するために使用する場合はそうです。クライアントは、自身を終了する前にその情報をサービスに伝えることができます。

ただし、いずれにせよ、exe を更新するには、最初に実行を停止する必要があります。したがって、サービスを更新する場合、特にサービスはクライアントの更新を処理するだけではないため、インストーラーを使用してサービスを停止し、exe を置き換えて、サービスを再起動する方が安全です。その場合、インストーラーを使用してクライアントの更新を行ってみませんか? ダウンロードされた更新プログラムは、必要に応じてクライアントとサービスの両方を停止し、ファイルを置き換えてから、終了後にクライアントまたはサービスにインストーラーを削除させる自己完結型のインストーラーである可能性があります。次の OS の再起動。

于 2013-08-22T19:58:33.070 に答える