DOBON.NET DOBON.NETプログラミング掲示板過去ログ

独自の自動更新

環境/言語:[C#2008 xp、vista、win7]
分類:[.NET]

お世話になっています。

自分自身(起動済みのアプリ)から最新バージョンを確認して
新しいバージョンがある場合
更新させるプログラムを作成したいのですが、
分からずに困っています。
どのようにしたらいいのでしょうか?

よろしくお願いします。
ClickOnce は使わないのですか?

http://www.atmarkit.co.jp/fdotnet/clickonce/index/index.html
ご回答、ありがとうございます。

ClickOnceも検討したのですが、
Webからのインストールが必要なようですし、
通常のインストーラ形式でのソフトで
更新処理を行いたいと思っています。

他にもいい方法は、ありますでしょうか?
> Webからのインストールが必要なようですし、

ClickOnce は配置場所として以下の三つを指定できるようです。

http://www.atmarkit.co.jp/fdotnet/clickonce/clickonce02/clickonce02_01.html
(A)インターネット/イントラネットなどのWeb上(http URL)
(B)ネットワーク上でのファイル共有(UNCパス)
(C)CD-ROM/DVD-ROMなどのローカル環境上(ディレクトリ・パス)

こちらも検討してみてはいかがでしょうか?
  • 題名: Re[3]: 独自の自動更新
  • 著者: Azulean
  • 日時: 2009/09/03 0:23:47
  • ID: 25345
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No25340に返信(ららさんの記事)
> 通常のインストーラ形式でのソフトで
> 更新処理を行いたいと思っています。

msi 形式のインストーラになっているのであれば、きちんとした手順のアップデータにしないと、実行したときに古いバージョンに復元されたりとかトラブルがあるかもしれません。(詳細な手順は知らないので述べられませんが…)

また、アップデートの実行には恐らく、管理者権限が必要になるため、Vista や 7 では昇格しないといけないでしょう。

多分、そんなに簡単には解決しないと思います。


考えたこと:
1) アプリ起動時に最新バージョンに関する情報が入っている Web サイト等にアクセスする
2) 情報を見て新しいバージョンがあればユーザに確認する
3) ユーザの了承を得て、新しいバージョンの msi/msp 等をダウンロードする
4) msi/msp を実行して、アプリを終了する
5) msi/msp でアップデートを実行する
6) アップデート完了

アップデート完了後に自動的にアプリを起動したいのであれば、アップデートの進行状況を確認できるような仕組みが必要かもしれませんね。

気になる点:
・msi でインストールするものなのかどうか
・独自のアップデータを作る路線の場合は昇格をさせないといけない
・独自のアップデートと msi でのインストールの組み合わせだと、アドバタイズショートカットの罠にはまりそう。(起動時に元のバージョンに復元される等)
  • 題名: Re[1]: 独自の自動更新
  • 著者: オショウ
  • 日時: 2009/09/03 8:40:44
  • ID: 25346
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
> 自分自身(起動済みのアプリ)から最新バージョンを確認して
> 新しいバージョンがある場合
> 更新させるプログラムを作成したいのですが、
> 分からずに困っています。
> どのようにしたらいいのでしょうか?

  現在は.NETの機能に頼るのがよい方法だと思いますが、それらが無い
  時期(VS.NET2002)(あったかもしれませんが調べられなくて)に、
  自分で更新させる機能を作りました。

  結果的には・・・
  1. 起動ランチャー
  2. 本体プログラム

  の、2本だてにして、起動ランチャーにアップバージョンの確認を
  させ、あれば更新した後に本体プログラムを起動させる。

  と言うものです。

  当時の構成では、ネットワーク上のサーバーに更新ファイルを配置
  し、プロトコルは、HTTP/FTP/共有フォルダのどれかを選択できる
  ようにし・・・

  1. 起動ランチャーを実行
  2. 起動ランチャーが指定された先(http://〜・ftp://〜・\\server\〜)
    に所定のファイルがあるか確認
    無ければ、指定された本体プログラムを起動
  3. 有った場合、ローカルにダウンロード、もしくはコピーする
    この場合は、当然、本体プログラムに上書きしないようにする。
    exeやdllの場合、ファイルバージョン等を設定できるので、
    オリジナルとダウンロードした双方の情報を取得し比較。
    ダウンロードした方が新しい場合、オリジナルに上書き。
  4. 後、本体プログラムを実行。

  まぁ〜何とでもなります。

  ※ exeやdll以外のファイルの場合は、ファイルの日付やサイズを
    比較情報に使いますが、HTTP/FTPのプロトコルを使った場合は
    ローカルにダウンロードした日付になってしまう場合もありま
    すので注意が必要。
    クライアントが複数存在しない1台だけなら、更新処理した後
    にサーバー側ファイルを削除するようにすれば問題ないかと。
    ただし、HTTPの場合は削除できないので、ダミーのWebページ
    を作って、そのページを参照すれば削除する・・・なんて小細
    工してました・・・

以上。参考まで・・・

DOBON.NET | プログラミング道 | プログラミング掲示板