2

私のプロジェクトには、ユーザーのオフィス デスクトップ PC で実行される WinForms、WPF、および Windows サービス プログラムが含まれています。これらのアプリケーションが、特定の URL で利用可能な新しいバージョンを定期的にチェックし、新しいバージョンを自動的にダウンロードして、ユーザーの注意を引くことなく新しいバージョンに置き換えてほしい (ユーザーは Windows XP から 7 までを実行し、非特権アカウントを使用して作業する可能性があることに注意してください) (Active Directory の一部である可能性があります))。または、更新パッケージ全体を無人インストールの MSI パッケージとして配布できる必要があります。

これを実装するための推奨事項はありますか?

4

2 に答える 2

1

あなたは運が悪いです - 悲しいことに、すべての解決策は最悪です。あなたの最善の策 (つまり、私がやっていること) は、1 つのアプリケーションにそれが古くなっているかどうかを定期的にチェックさせ、それをユーザーに知らせることです。さて、私の場合、「Wndows Service」は「ユーザーが別のコンピューターにログインして、ほとんど常にサービスを制御している」ことを意味するため、実際に警告する人がいます。それが機能しない場合は、Windows Update サービスのようなものを再実装する必要があります。残念ながら、それを行う事前定義された方法はありません。

ユーザーの注意はまったく機能しません。- Windows サービスのインストール / 更新は、更新を行う Windows サービスの権限からのものであっても、管理者権限で行う必要があります。あなたがそれをするものは何でも汚い問題。

私は MSI を使用します。この方法では、企業ユーザーはソフトウェア管理 (特権をインストールできます) を介して展開でき、そこで使用するものは何でも (複数あります)、(ホーム) エンド ユーザーは管理者権限でインストールできます。他のすべてのソフトウェアと同じように。おそらく、中央サーバーで新しいバージョンのチェックを開始するたびに、Web サービス呼び出しを実行します。

于 2010-05-09T14:57:05.990 に答える
1

これは確かに問題のある領域であり、簡単な解決策はありません。特に、すべての解決策には多くの欠点があり、明確な勝者がいないためです.

1 つのオプションは、.dll ファイルのみを置き換えることです。これにより、アセンブリの署名が防止され (実行可能ファイル自体を更新していないため)、ほとんどすべてのアプリケーション ロジックが dll に存在するようにアプリケーションを構造化する必要があります。利点は、exe 自体で更新をチェックし、利用可能な場合はダウンロードできることですが、これは、dll が別の場所 (たとえば、appdata のアプリケーション プラグイン フォルダー) にデータとして保存されている場合にのみ実現可能です。

もう 1 つのオプションは、ローカルの管理者権限で実行される Windows サービスを使用して、更新プログラムをダウンロードしてインストールすることです。これは、別の Windows サービスの場合でも、ユーザーの介入なしで発生する可能性があります。ここでの秘訣は、更新サービスを実行したままにするのではなく、実際のアプリケーションの 1 つから開始し (起動時または終了時に)、更新をインストールした後にサービスを停止して、ユーザーが行き詰まらないようにすることです。さらに別の更新サービスを備えたシステム。

最後に、「完全に無人」の部分を削除することを真剣に検討する必要があります。ユーザーは断続的な起動の遅延が問題であると感じるかもしれませんが、あなたがしていることを伝えても害はありません. 起動時に「新しいバージョンが見つかりました - インストール (今) (終了時) (後で)」というダイアログを表示するソリューションが特に気に入っています。これにより、遅延が必要かどうかを完全に制御できます。一部のアプリケーション (私が知っているすべてのポーカー クライアントなど) は、サーバー側のソフトウェアと同期する必要があり、このオプションを提供しませんが、何が起こっているかを知るために「更新中」ダイアログを表示します。インストールが自動である限り、プロンプトについて心配する必要はありません。

于 2010-05-09T15:32:01.760 に答える