スタンドアロン実行可能ファイルとインストールされた実行可能ファイルの違いは何ですか?

スタンドアロン実行可能ファイルとインストールされた実行可能ファイルの違いは何ですか?

少なくとも Windows では、静的にリンクされた実行可能ファイルを直接ダウンロードして直接起動したり、独自のプログラムを作成してインストールせずに実行したり (動的に実行することも) できることに気付きました。

それで私の主なポイントは…インストールプロセスの目的は何でしょうか?つまり、おそらくWindows レジストリただし、実用性と使用目的のために、実行可能で、不揮発性ストレージに保存され、そのデバイス上のファイルシステムを介してアクセスされ、OS 上で実行される、単一の独立したスタンドアロン プログラムを用意することは可能です。では、事実上あらゆる規模の優れたプログラムの多くがインストール構成を経ずに完璧に動作できるのであれば、この「これをインストール」する作業は一体何なのでしょうか。少し戸惑います。データベースやその他のメタデータ/アクセス構成システムは別として、後者 (インストールされた実行可能ファイル) がスタンドアロンと同じように実行および動作するとしたら、実際の違いは何でしょうか。

インストールされていないプログラムとインストールされているプログラムの間に、私が知らない違いがあるのでしょうか?

PS: これは Windows OS にのみ適用されるわけではなく、同様の機能を実装するすべての OS に適用されます。

答え1

プログラムがスタンドアロンの実行可能ファイルではなくインストーラーとして提供される理由はいくつかあります。

ファイルサイズに関する懸念

  • 多数の大きな依存関係を持つプログラムでは、Web ベースのインストーラーをバンドルして依存関係をダウンロードし、共通の場所に配置すると、複数のプログラムで共有できるようになります。たとえば、DirectX は非常に大きなライブラリです。システム上の DirectX に依存するすべてのプログラムに DirectX ランタイム全体をバンドルすると、かなりの容量を消費することになります。4 TB のハード ディスクの時代では問題にならないかもしれませんが、SSD の容量はかなり小さく、64 GB 程度のストレージしかないウルトラブックでも一般的に使用されるようになっていることを考慮してください。もちろん、DirectX 以外にも共有ライブラリは多数あります。

  • 非常に大きく、継続的に更新されるプログラムは、多数の小さなファイルの集合として配布するのが最適です。また、インターネットで更新をチェックし、更新があれば必要な変更のみをダウンロードするランチャーまたはアップデーター プログラムも配布します。すべての大きなプログラムが 1 つのモノリシックな実行可能ファイルとして配布された場合、ファイル ロックのためディスク上で実行中の実行可能ファイルにパッチを適用することはほぼ不可能であるため、パッチ プロセスでは実行可能ファイル全体を再ダウンロードする必要が生じる可能性が高くなります。また、アップデータはファイルの場所を知る必要があるため、多くの場合、そのディレクトリ パスをレジストリ内のよく知られた場所に保存します。

ユーザーの利便性に関する懸念

  • Visual Studio や Microsoft Office などの非常に大きなプログラムのインストーラーでは、ユーザーが特定の機能を必要としないことがわかっている場合は、その機能のインストールを選択解除できます。これには 3 つの潜在的な利点があります。ディスク領域の消費量が削減される、インストーラーが Web ダウンローダーの場合はダウンロード時間と帯域幅の消費量が削減される、ユーザーのマシンの「乱雑さ」と「膨張」が軽減され、スタート メニューやデスクトップのショートカットやスタートアップ プログラムなどが削減されるなどです。

  • 複雑なプログラムのインストーラーには、インストーラーの一部としてユーザーフレンドリなグラフィカル インターフェイスを使用してユーザーが設定できる構成オプションが付属していることがよくあります。たとえば、MySQL または SQL Server インストーラーでは、インストーラーで [完了] をクリックする前に、データベース サーバーを起動して実行するプロセス全体を案内できます。

  • インストーラーは、ライセンスキーなどの必要な情報をユーザーに要求することができます。これらの情報は一度入力するだけで済みます。これにより、プログラム自体の設計が簡素化され、起動時に実行および確認する必要がある作業の数を減らすことができます。これにより、ユーザーは次のような安心感を得ることができます。一度プログラムが正常にインストールされると、プログラムは「正常に動作する」はずです。プログラム内には、使用を妨げる可能性のある「落とし穴」はもうありません。

互換性に関する懸念

  • 一部のプログラムは他のプログラムと競合します。これはソフトウェア エンジニアリングの単純で残念な事実です。他のプログラムと競合することがわかっているプログラムをインストールする前に、まずシステムをチェックして、互換性のないプログラムがインストールされていないかどうかを確認すると役立つことがよくあります。そうであれば、ユーザーに警告することができます。たとえば、VMware と VirtualBox の古いバージョンには非常に危険な非互換性の可能性があり、あるプログラムが、別の製品によってユーザー用に予約された特別な仮想化プロセッサ命令を使用しようとするため、ブルー スクリーン オブ デスが発生します。インストーラーなしで最終製品をユーザーに提供するだけの場合、互換性のない製品の存在を最初に確認する必要があります。プログラムの起動が遅くなる可能性があります。

  • プログラムは、ユーザー単位ではなくシステム全体のレベルでのみインストールできる他のシステム コンポーネントに依存している場合があります。これらの特別なシステム コンポーネントをインストールするには、通常、管理者権限が必要であり、インストーラーを実行する必要があります。

特権の強化と特別サービス

  • 一部のプログラムは、その機能のためにオペレーティングシステムの変更に依存しており、管理者権限で何らかのインストーラーがなければ、これらの変更を簡単に実装することはできません。たとえば、Wiresharkなどのドライバーやカーネルモジュールをインストールするプログラムは、単にカーネル モード コンポーネントを別々のファイルで配布する必要があるため、実行できません。最良の場合でも、ユーザーが手動でアーカイブを解凍し、デバイス ドライバー用の何らかのインストーラーを実行する必要があります。サービスは、インストールに管理者権限が必要なもののもう 1 つの例です。インストーラー ソフトウェアは、メイン プログラム自体が実行のたびに管理者権限を要求することなく (多くの場合、これは不要なセキュリティ上のリスクになります)、エレガントな方法で管理者権限を取得するのに特に優れています。

インストーラーが便利な理由をすべて説明したところで、反対側からの意見をいくつか挙げます。

  • 多くのプログラムは、管理者権限を必要とするインストーラーとしてのみダウンロード可能なものであっても、インストーラーから強制的に「解凍」して、インストールせずに直接実行することができます。他のプログラム、特にオープンソースのプログラムは、自己完結型の実行ファイルに再パッケージ化されます。ポータブルアプリ注目すべきはいくつかのプログラムをインストーラーから解凍すると、機能が低下したり、エラーが発生したり、その他の問題が発生したりします。

  • Windows 以外のオペレーティング システムでは、ほとんどの場合、単にプログラムをダウンロード (またはコンパイル) し、ルート権限を取得せずに一般ユーザーとして実行できます。オペレーティング システムのコア部分であるパッケージに関してはいくつかの例外がありますが、ほとんどのユーザー アプリケーションは、パッケージ マネージャーを使用してシステム全体にインストールしなくても、ホーム ディレクトリで実行できます。Windows は、Windows 上のほとんどのデスクトップ プログラムにインストーラーがあり、通常は他の方法ではインストールできないという点で、少し特殊なケースです。

  • Windows以外のプラットフォームでも、カーネルモジュールをロードする機能を必要とするプログラムには、カーネルモジュールをコンパイルして適切なディレクトリにインストールする何らかのインストーラが付属しています。プログラムがWindowsの場合にもインストーラが表示されることがあります。デーモンシステム サービス スクリプトを使用して起動されます (例: ) /etc/init.d。このタイプの「シュリンクラップされたバイナリ」は、GNU/Linux ではあまり一般的ではない配布方法ですが、ほとんどの Linux ディストリビューションでは、ほとんどのソフトウェアがインストール可能なパッケージの形式で提供されており、インストールにはそれぞれルート アクセス (管理者アクセス) が必要です。


結論

なぜインストーラーが必要なのかと聞かれました。簡単に答えると、私たちはそうしません-- 厳密に言えばそうではありません。できない原則として、リソースやインストーラなどを含まない、単一の自己完結型実行ファイルにバンドルされます。VMware Workstation のような複雑なものでも、管理者権限を自動的に取得し、ハイパーバイザー カーネル モジュールをディスク上のファイルに書き出し、プログラムの起動時に動的にインストールし、そのすべてのリソース (画像、サウンドなど) を実行ファイルのデータ セクション内にバンドルして出荷することができます。

インストーラーを使用するかどうかは選択ソフトウェアメーカーがしなければならないこと。インストーラーの使用には利点と欠点がある。多くのベンダーは、ソフトウェアを配布することを選択する。両方インストーラーとして、そしてスタンドアロン バイナリとして、または少なくとも解凍して実行できる ZIP ファイルとして。インストーラーが絶対に必要ないソフトウェアの場合、これは非常に実用的な方法であり、誰もが満足できます。通常、インストーラー以外の形式で出荷されないソフトウェアは、そのソフトウェアの一部のコンポーネントをインストールするために管理者権限を必要とするソフトウェアです。インストーラーは、必要な権限を取得する最もエレガントな方法だからです。

個人的には、日々の仕事でインストーラーは非常に面倒だと感じています。使用しているコンピューターの管理者権限がないときにプログラムを実行したいことがあるからです。インストーラーを手動で解凍してプログラム ファイルを抽出し、それらのファイルを正しく実行した経験がかなりあります。ただし、常に管理者権限を持っている自宅の個人用 PC では、インストーラーが有益で便利だと感じています。ほとんどのインストーラーには、デスクトップ ショートカットを作成するかどうかなど、インストーラーがなければ手動で行う必要があった便利なオプションが用意されているからです。

答え2

インストール プロセスでは、次の項目が考慮されます。

  1. .net Framework バージョンや Direct X などの必要なライブラリ (API) がインストールされているかどうか。

  2. いくつかの追加のシステム DLL ファイルをシステム フォルダーにインストールします。システム フォルダーにこれらのファイル (同じバージョン) がすでに含まれている場合は、この手順を無視してください。この方法では、同じ DLL ファイルのコピーを複数持つ必要はありません。

  3. アプリケーションをすばやく起動できるように、スタート メニューまたはデスクトップにショートカットをインストールします。

  4. おっしゃるとおり、レジストリの変更です。この手順は、実際にはこのコンピューターでアプリケーションが初めて実行されるときに実行できるため、それほど重要ではありません。

  5. 非常に重要: ソフトウェア (Google デスクトップ バーや Yahoo! バーなど) を IE にバンドルするかどうか。これは、多くの独立系ソフトウェアが開発者に収益をもたらす方法です。無料ソフトウェアを使用している場合は、これを忘れないでください。

ここでは「実行可能」アプリケーションを検討しているため、IE アドオンや関連するものをインストールできる手順について説明する必要はありません。

答え3

スタンドアロン プログラムには外部依存関係はありません。

.exe ファイルだけである必要はなく、付随するライブラリやデータ ファイルも含めることができます。アーカイブをフォルダーに解凍し、実行可能ファイルを実行します。アーカイブを解凍しただけでは、スタート メニューにショートカットは追加されません。そのため、解凍したアプリケーションがあるフォルダーに移動してそこから起動するか、スタート メニューに手動でショートカットを作成する必要があります。多くのコンピューター ユーザーにとって、これは難しい作業です。

より使いやすく

インストーラーがインストール プロセスをガイドします。インストーラー (.exe または .msi (上級ユーザー以外は前者を推奨)) をダウンロードして実行します。インストーラーは、通常 にあるインストール フォルダーを取得し、Program Filesファイルをコピーして、スタート メニューにショートカットを作成します。これで完了です。ほとんどの場合、[次へ] を数回クリックするだけです。

次に、[スタート] メニューに移動してアプリケーションを実行します。一部のインストーラーでは、インストールの完了時にアプリケーションを起動するオプションが提供されます。

アプリケーションが特定の種類のファイルまたはドキュメントを開く場合、インストーラーはそれをシェルに登録します。これにより、ファイルをクリックして開くことができます。

ライセンス契約

多くのアプリケーション (商用および無料) では、アプリケーションを使用する前にライセンス契約に同意する必要があります。ライセンス条件に同意することを確認するまで、インストールは続行されません。ライセンスを読んでいなくても、同意したことにはなります。

依存関係

実行可能ファイルをコピーするだけでは不十分な場合があります。アプリケーションでは、共有コンポーネントや特別なランタイム ライブラリが使用されることがよくあります。たとえば、.Net 用に作成されたアプリケーションを実行するには、.Net フレームワーク ランタイムをインストールする必要があります。また、静的にリンクされていない場合は、Visual C++ ランタイムもインストールする必要があります。インストーラーは、すべての依存関係が満たされているかどうかを確認します。

アプリケーションが複数の .exe ファイルや .dll ファイルで構成されている場合、Visual C++ ランタイムへの動的リンクによってディスク領域が削減されます。.exe と .dll が静的にリンクされている場合、ランタイムは各ファイルごとに複製されます。

ライブラリのライセンス条項により、静的リンクが許可されない場合があります。

安全

ランタイムに脆弱性が見つかった場合は、アプリケーションとは別に更新できます。.Net および Visual C++ ランタイムの更新プログラムは、Windows Update を介して自動的にインストールされます。

実行可能ファイルとライブラリが静的にリンクされている場合、アプリケーション ベンダーはアプリケーションを再コンパイルし、更新バージョンをリリースする必要があります。そのため、共有ランタイムを使用すると、開発者とベンダーのアプリケーション保守コストが削減されます。

にインストールすると、Program Filesより安全な環境も提供されます。管理者権限がないと、そこにあるファイルを変更または削除することはできません。

レジストリ

多くの Windows アプリケーションはレジストリのエントリに依存しています。アプリケーションが COM を使用する場合、すべてのオブジェクトを登録する必要があります。そうしないと、アプリケーションは必要なオブジェクトを作成できず、起動しません。

答え4

簡単な答え: スタンドアロン exe を実行するには、コンピューターにライブラリをインストールする必要はなく、レジストリ エントリやその他のコンポーネントも必要ありません。

インストールされたファイルできるインストーラー パッケージではスタンドアロンとして機能しますが、通常は、一緒にインストールされるさまざまなコンポーネントとライブラリに依存します。

多くの場合、ユニバーサルエクストラクター(非公式アップデート:ここ)を使用すると、インストーラの内容を抽出し、Windowsで管理者権限なしでプログラムを実行できます。MSIインストーラは、レスムシ

他のほとんどのオペレーティング システムでは、すべてのプログラムは、ホーム ディレクトリ内のユーザー固有の 'bin'、'lib'、およびその他のディレクトリを通じて、ルート/管理者権限なしで実行できます。個人的には、管理者権限がない場合にプログラムを使用することが困難になるため、インストーラーはほとんどの場合嫌いです。しかし、大企業は平均的なエ​​ンド ユーザーのためにプロセスを簡素化するために、インストーラーをそのようにパッケージ化しています。

関連情報