2009-06-13 9 views
9

私はNSISで作ったインストーラを使ってプロジェクトを行っていますが、変更されたファイルのみを持つ新しいバージョンへのアップデートがあり、変更履歴が表示されます。ターゲットプラットフォームはウィンドウです。どのような方法/提案が必要ですか?NSISを使用してアップデートインストーラを作成するにはどうすればよいですか?

+0

プロジェクトを完了しましたか?最後に何を使いましたか?おそらくあなたは答えの一つを受け入れることができたでしょう:) –

+0

はい、私はそれを完了しました...しかし、私が好きだったより複雑だったので、私はこれらの方法のどれも使用しませんでした。だから私はアップデート用のフルリリースビルドを行い、アプリケーションを実行させる前にユーザにダウンロードを要求した。 – staackuser2

+0

私はちょうどあなたの答えを受け入れました...私はそれを使用していませんが、それは利用可能な最良の方法のように見えます。 – staackuser2

答えて

12

NSISを使用して再検討したいことがあります。更新プログラムをパッチして配布する場合は、Windowsインストーラ機能(msiexec)を使用するインストーラテクノロジを使用することで最大の利点が得られます。

NSISは基本的には実行して実行するプログラムですが、Windowsインストーラタイプのインストーラでは、アプリケーションをWindowsインストーラmsiサービスで管理できる機能とコンポーネントに分割する必要があります。 MSIは、インストールした製品のバージョン、更新プログラムを再度実行するかどうか、異なるバージョンの2つの製品をインストールできるかどうか、パッチを特定のバージョンの製品に適用できるかどうか、更新やインストールに関するその他の質問。

Windowsインストーラテクノロジに変更すると、基本的に要求しているほとんどのものがすぐに使用できます。 NSIS(Windowsインストーラテクノロジを使用しない)を使用する場合は、すべて自分で実装する必要があります。

例として、AdvancedInstaller(http://www.advancedinstaller.com/)と呼ばれる非常に包括的なインストーラビルダーがあります。 また、トレーディングフォーラムやニュースグループの残りの部分を費やしたいのであれば、同様のことをするWiXというオープンソース製品があります;)

+5

なぜ私はこれのためにマークダウンされているか分かりません。 NSISはオープンソースですが、Windows上で実行しているすべての作業の後に、その作業に最適なツールについて考える必要があります。 –

1

可能な方法の1つは、リリースされた各バージョンと、リリースごとに変更されたファイルの一覧を含むXMLファイルをダウンロードサーバーに保存することです。インストーラは、インストールしたファイルのバージョンのインストール時にレジストリキーを書き込みます。

更新時に、インストーラはXMLファイルをダウンロードして解析し、現在インストールされているバージョンよりも高いバージョン番号を持つノードを検出します。インストーラページのテキストボックスにすべてのファイルを表示し、ユーザーが確認すると、インストーラはすべてのファイルをダウンロードし、レジストリを最新バージョンに更新します。

+0

私はいくつかのファイルしか持っておらず、ほぼすべてのアップデートで変更されるでしょう。だから、私はちょうどupdater.exeでそれらをバンドルし、そのインストーラを完全なインストールexeファイルとは別にしたいと思っていました。まだ何が最善であるかはまだ分かりません。たぶん完全なインストールは、私の場合には十分です。 – staackuser2

3

私の以前のコメントにもかかわらず、 13カスタムページを持つNSIS。私もパッチを見ているし、それはちょっとしたハックだ。アドバイスの主な点は、あなたがあなたがパッチしていると思うバージョンにパッチを当てていることを確認し、利用可能なパッチ適用プラグインの1つを使用することです。

ファイルを比較してパッチ変更ファイルを生成するいくつかのパッチ適用技術と、それらを「インストール」するために必要なNSISコードがあります。私は、NSISパッチ・ジェネレーションが、最小限の手間で、私が望んでいたことをしたことを発見しました。ドキュメンテーションはちょっと薄いですが、あなたが「ああ」と思うと、それが分かります。

おそらく、自動的に生成された変更ログに少し問題があります。私は自分で変更ログを作成することをお勧めします(または、少なくともアプリケーションの変更ごとに追加の変更を加えてください)、通常のアプリケーションファイルであるかのようにインクルードしてパッチジェネレータに更新させてください。

http://sourceforge.net/projects/nsispatchgen/

0

デルファイのようないくつかのコンパイラは、あなたのコードの小さな一部を変更した場合でも、最終的な実行可能ファイルに多くの変更を行います。

まず、パッチを当てる価値があるかどうかを確認する必要があります。

もう1つの考慮点は、それ自体でパッチを当てることです。 一部のシステムフォルダで、一部のアンチウイルスソフトウェアによってパッチがブロックされている可能性があります。

最後に、増分パッチデータサイズが元のファイルを超えることがあります。

上記のテーマに基づいて、私はあなたにパッチを当てることを勧めません。 代わりにフルインストーラを使用

1

あなたはcURLをよく知っていますか? http://www.shininglightpro.com/products/Win32OpenSSL.html http://curl.haxx.se/download.html#openssl

それが任意のプロトコルをダウンロードし、あなたのファイルをダウンロードするためにそれを使用することができます。それはコマンドラインアプリです。

インストーラでは、メインプログラムが実行されているかどうかを確認するプログラムをスケジュールし、実行していない場合は終了し、curlを呼び出してサイトからバッチファイルをダウンロードしてから実行しますバッチファイル
ダウンロードするバッチファイルは、カールを使用して正しいファイルをダウンロードすることでアプリを更新します。 このプロセスは、更新頻度に応じて、2週間ごとまたは1か月に1回実行する必要があります。

インストーラのアンインストール部分では、アップデートを含め、問題のアプリのすべての部分を削除できる必要があります。これは、プログラムファイルのそのサブディレクトリからすべてのファイルを削除することによって達成できます。

RMDir /r /REBOOTOK '$INSTDIR' 
RMDir /r /REBOOTOK "$SMPROGRAMS\$StartMenuFolder" 
Delete '$SMPROGRAMS\$StartMenuFolder\gpl3license.lnk' 
Delete '$SMPROGRAMS\$StartMenuFolder\readme.lnk' 
Delete '$SMPROGRAMS\$StartMenuFolder\${PRODUCT_TITLE}.lnk' 
DeleteRegKey HKCU "Software\Your major subkey\${PRODUCT_NAME}" 
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" 
DeleteRegKey /ifempty HKCU "Software\${PRODUCT_NAME}" 

PRODUCT_NAMEはテンプレートのようなnsiファイルを使用しているため作成しました。 これは、インストーラファイルのアンインストーラセクションの一部に過ぎません。

関連する問題