現在、NSIS で作成したインストーラーを含むプロジェクトを持っていますが、変更されたファイルのみを持ち、変更ログを表示する新しいバージョンに更新したいと考えています。ターゲット プラットフォームは Windows です。これを行うには、どのような方法/提案が必要ですか?
6 に答える
NSIS の使用を再検討することをお勧めします。更新プログラムのパッチ適用と配布に関心がある場合は、Windows インストーラー機能 (msiexec) を利用するインストーラー テクノロジを使用することで最大のメリットが得られるでしょう。
NSIS は基本的に、実行して目的を実行するプログラムですが、Windows インストーラー タイプのインストーラーでは、Windows インストーラー msi サービスで管理できる機能とコンポーネントにアプリケーションを分割する必要があります。MSI は、インストールした製品のバージョン、インストーラーを再度実行するとメンテナンス モードで実行されるかどうか、異なるバージョンの 2 つの製品をインストールできるかどうか、製品の特定のバージョンにパッチを適用できるかどうか、または更新とインストールに関するその他の質問。
基本的に、Windows インストーラー テクノロジに変更すれば、要求しているほとんどのものをすぐに利用できます。一方、NSIS (Windows Installer テクノロジを使用しない) を使用する場合は、すべて自分で実装する必要があります。
例として、AdvancedInstaller ( http://www.advancedinstaller.com/ ) と呼ばれる非常に包括的なインストーラー ビルダーがあり、それはあなたが望むもののように聞こえます。あるいは、残りの人生をフォーラムやニュースグループのトロールに費やしたい場合は、WiX と呼ばれるオープン ソース製品があり、同様のことができます ;)
以前のコメントにもかかわらず、私は 13 個のカスタム ページを持つ NSIS を使用して 5000 行のインストーラーを作成しました。パッチ適用も検討しましたが、これはちょっとしたハックです。主なアドバイスは、パッチを適用すると思われるバージョンにパッチを適用していることを確認してから、利用可能なパッチ適用プラグインの 1 つを使用することです。
ファイルを比較し、パッチ変更ファイルとそれらを「インストール」するために必要な NSIS コードを生成するいくつかのパッチ技術があります。NSIS Patch Gen は、最小限の手間で、私が望んでいたことをかなりうまくやってのけたことがわかりました。ドキュメンテーションは少し薄いですが、一度理解すると「ああ、そうだ」と思います。
おそらく、自動生成された変更ログで少し問題が発生するでしょう。変更ログを自分で作成し (または、少なくともアプリケーションの変更ごとに追加の変更を追加し)、それを通常のアプリケーション ファイルのように含めて、パッチ ジェネレーターに更新させることをお勧めします。
考えられる方法の 1 つは、リリースされた各バージョンと各リリースで変更されたファイルのリストを含む XML ファイルをダウンロード サーバーに保存することです。インストーラーは、インストールしたファイルのバージョンのインストール時にレジストリ キーを書き込みます。
次に、更新時に、インストーラーは XML ファイルをダウンロードして解析し、現在インストールされているものよりも高いバージョン番号を持つノードを見つけます。インストーラー ページのテキスト ボックスにすべてのファイルを表示し、ユーザーが確認すると、インストーラーはすべてのファイルをダウンロードし、レジストリを最新バージョンに更新します。
あなたはcURLに精通していますか? http://www.shininglightpro.com/products/Win32OpenSSL.html http://curl.haxx.se/download.html#openssl
任意のプロトコルをダウンロードし、それを使用してファイルをダウンロードできます。コマンドラインアプリです。
インストーラーで、最初にメイン プログラムが実行されているかどうかを確認し、実行されていない場合は終了するプログラムをスケジュールし、curl を呼び出してサイトからバッチ ファイルを更新と共にダウンロードし、バッチ ファイルを実行します。
ダウンロードしたバッチ ファイルは、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 ファイルをテンプレートのように使用するために作成した !define です。これは、インストーラー ファイルのアンインストーラー セクションの一部にすぎません。
Delphi などの一部のコンパイラは、コードの一部を変更しても、最終的な実行可能ファイルに多くの変更を加えます。
したがって、最初にパッチを適用する価値があるかどうかを確認する必要があります。
別の考慮事項は、それ自体にパッチを適用することです。一部のシステム フォルダでは、一部のウイルス対策ソフトウェアによってパッチ適用がブロックされる場合があります。
最後に、増分パッチのデータ サイズが元のファイルを超えて大きくなる可能性があります。
上記の主題に基づいて、パッチを適用することはお勧めしません。代わりにフルインストーラーを使用してください