web-dev-qa-db-ja.com

プログラムがそれ自体を更新する方法を「理解」していません。ソフトウェアを更新するにはどうすればよいですか?

.exeファイルを作成し、すべてが桃色だとします。それがうまくいく素晴らしい。

ソフトウェアの新機能に取り組んでいて、すでに古いバージョンを持っている人が利用できるようにしたい場合、ソフトウェアに新しいバージョンを見つけてパッチを適用し、ビジネスを開始するにはどうすればよいですか。

この問題に頭を悩ませているようには見えません。

ありがとうございました。

EDIT:混乱して申し訳ありませんが、もっとコードごとの答えを意味していました。更新を許可する必要があるコードに何か特別なものはありますか?

たとえば、新しい機能を追加したい場合、すでにパッケージ化されている.exeに「メソッド」を追加するにはどうすればよいですか? :Sそれは私を回転させます。

24
Sergio Tapia

Click Once Deployment を確認する必要があります。

ClickOnceは、最小限のユーザー操作でインストールおよび実行できる自己更新型のWindowsベースのアプリケーションを作成できるようにする展開テクノロジです。 VisualBasicおよびVisualC#を使用してプロジェクトを開発した場合、Visual Studioは、ClickOnceテクノロジで展開されたアプリケーションの公開と更新を完全にサポートします。

これにより、ダウンロード可能なセットアップexeが作成され、Webにロードされます。ユーザーはこれをその場で実行するか、ダウンロードして実行します。これにより、exeがコードでラップされ、Webの場所(選択した頻度で)の更新がチェックされます。見つかった場合は、ユーザーのためにインストールします。

これを有効にするために、コードに特別な変更を加える必要はありません。バージョン番号をインクリメントするだけではありません。通常どおりコードを変更および拡張し、コンパイル、ビルド、パッケージ化、アップロードするだけです。

ただし、ClickOnceは、管理アクセスを必要とするアプリケーションのインストールをサポートしていないことに注意してください。

ClickOnce配置を使用すると、管理者以外のユーザーがインストールして、アプリケーションに必要なコードアクセスセキュリティアクセス許可のみを付与できます。

したがって、アプリケーションを実行またはインストールするために管理者レベルのアクセスが必要な場合、それはあなたにとっての解決策ではありません。

15
ChrisF

通常、プロセスは次のとおりです。

  • ユーザーがアプリケーションを開始します
  • アプリケーションは「アップデーター」(別のプログラム)を起動します
  • 新しいバージョンが存在する場合、アップデーターはインターネットから取得します
  • その場合は、ユーザーに更新を提案してください
  • ユーザーが同意すると、アップデーターは新しいインストールパッケージ(増分可能)をダウンロードします
  • アップデーターはアプリケーションをシャットダウンし(または、ユーザーにシャットダウンを要求し)、新しいインストーラーを起動します。
  • インストールパッケージが残りを行います

もちろん、さまざまなバリエーションがありますが、これが基本的な方法です。

Windowsでは、少なくとも一部のソフトウェアは、常にオンになっているアップデータデーモンをインストールし、処理するソフトウェアの新しい更新をチェックします(たとえば、GoogleUpdater)。

16
Remo.D

1つのアイデア-チェックを行うローダーアプリケーションがあり、必要に応じて、メインアプリのexeを起動する前に更新しますか?

6
David M

現在の.exeを変更しません。

新しいバージョンのファイルをダウンロードする別のプロセスを起動します。新しいバージョンが古いバージョンを置き換えます。変更は必要ありません。

1
roomaroo

Windowsの場合(通常、Windowsが実行中に.exeファイルをロックするため)

  • ソフトウェアは更新が必要であると判断します
  • ソフトウェアはパッケージ化された更新実行可能ファイルを実行します(この時点でソフトウェアは終了します)
  • 更新は、必要なファイルをいくつかの一時フォルダーにダウンロードします
  • アップデートはパッチを適用します
  • アップデートはソフトウェアを再起動します
1
Sekhat

通常の方法は、アプリケーションがどこか(通常はインターネット上)で新しいバージョンを定期的にチェックすることです。これは、すべてのスタートアップまたは週に1回などに発生する可能性があります。

そこに、たとえば現在のバージョン番号を含むテキストファイルを簡単に置くことができます。インストールされているアプリケーションのバージョンよりも新しい場合は、アップデーターをダウンロードして(署名と署名の確認を忘れないでください)、新しいバージョンをインストールできます。

1
Joey

アプリが時々ウェブ経由でウェブサーバーにリクエストを送信するようにします。そのリクエストで、バージョン番号とインストーラーの最新バージョンへのリンクを含むファイルを返すようにします。そのバージョン番号が現在実行中のプログラムが考えているバージョン番号よりも大きい場合は、プログラムに新しいセットアップファイルをダウンロードして起動してもらいます。

1
Cory Petosky

コードの観点からは、IRunと呼ばれる単純なインターフェイスとIUpdatedと呼ばれる別のインターフェイスで構成されるアプローチが必要です。

public interface IRun()
{
  public void Run();
}

public interface IUpdated()
{
  public void Update();
}

これで、メインアプリケーションは、リフレクションを使用してライブラリをロードして「実行」し、実際のアプリケーションを起動します。

メインアプリケーションの実行可能ファイルは、次の手順を実行します。

  1. Updater.cfgを読み取り、指定された場所に接続して、アップデーターへの更新を確認します。
  2. 更新がある場合は、更新されたdllとupdater.cfgをダウンロードします
  3. リフレクションロードupdater.dllを使用して、Update()メソッドを起動します。

Updateメソッドは、実際のアプリケーションを更新するために同じ手順を実行します。

最後に

  1. 「core.dll」をロードし、Run()メソッドを起動します。

もちろん、「自分でやりたい」という条件で、ClickOnceも実際には非常に優れた方法であり、おそらくより優れていますが、制御が少なくなります。メインアプリケーションの実行可能ファイルは、それ自体を更新する必要がないほど単純であるか、とにかく更新する必要があります。

0
Jorge Córdoba