スタンドアロンの実行可能ファイルとインストール済みの実行可能ファイルの違いは?


17

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

それが私の主要なポイントに私をもたらします...インストールプロセスの目的は何ですか?多分Windowsレジストリ以外のことを意味します。ただし、実用性と使用目的のために、単一の独立したスタンドアロンプ​​ログラムを実行し、不揮発性ストレージに保存し、どのデバイスのファイルシステムを介してアクセスし、OS上で実行することも可能です。実質的にあらゆる規模の優れたプログラムがインストール構成を介さずに完全に機能する場合、この「このインストール」ビジネスの大きな問題は何でしょうか?データベースや他のメタデータ/アクセス構成システムは別として、後者(インストールされた実行可能ファイル)がスタンドアロンと同じように機能し、動作する場合の本当の違いは何ですか?

ここで、インストールされていないプログラムとインストールされているプログラムの違いを知りませんか?

PS:これは、Windows OSに適用するだけでなく、同様の機能を実装するものに適用する必要があります。

回答:


16

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

ファイルサイズの懸念

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

  • 非常に大規模で継続的に更新されるプログラムは、多くの小さなファイルのコレクションとして、インターネットで更新を確認するランチャーまたはアップデータプログラムとして最適に配布されます。更新が存在する場合は、必要な変更のみをダウンロードします。すべての大きなプログラムが単一のモノリシック実行可能ファイルとして出荷された場合、ファイルロックにより実行中の実行可能ファイルのディスクへのパッチングはほぼ不可能であるため、パッチプロセスでは実行可能ファイル全体の再ダウンロードが必要になる可能性が非常に高くなります。また、アップデーターはそのファイルの場所を知る必要があるため、多くの場合、そのディレクトリパスをレジストリ内の既知の場所に保存します。

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

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

  • 複雑なプログラムのインストーラーには、多くの場合、ユーザーがインストーラーの一部として使いやすいグラフィカルインターフェイスを使用してセットアップできる構成オプションが付属しています。たとえば、MySQLまたはSQL Serverインストーラーを参照してください。インストーラーで[完了]をクリックする前に、データベースサーバーを起動して実行するプロセス全体を実行できます。

  • インストーラーは、1回だけ入力する必要があるライセンスキーなどの必要な情報をユーザーに要求できます。これにより、プログラム自体の設計が簡素化され、実行する必要のあるものの数を減らして、起動時にチェックすることができます。また、これは、ことをユーザー持つ自信につながるいったんプログラムが正常にインストールされ、それが必要「だけで仕事を」 -これ以上の「落とし穴」は、それを使用してから、それらを保持することができ、プログラム内ではありません。

互換性の懸念

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

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

昇格した特権と特別なサービス

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

インストーラーが役立つ理由についてこれらのすべての理由を示したので、反対側からのいくつかの観察結果を以下に示します。

  • 多くのプログラムは、管理者権限を必要とするインストーラーとしてのみダウンロード可能であっても、インストーラーから強制的に「アンパック」し、インストールせずに直接実行できます。他のプログラム、特にオープンソースのプログラムは、PortableAppsによって自己完結型の実行可能ファイルに再パッケージ化されます。これは、注目すべきは、いくつかの彼らのインストーラから、機能性、展示エラー、またはその他の問題が減少しているだろうアンパックプログラム。

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

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


結論

インストーラーが必要な理由を尋ねました。短い答えは、厳密に言えば、そうではないということです。原則として、リソースやインストーラーなどのない単一の自己完結型実行可能ファイルにバンドルできないアプリケーションの例はほとんどありません。ディスク上のファイルに保存し、プログラムの起動時に動的にインストールし、すべてのリソース(画像、音声など)を実行可能ファイルのデータセクション内にバンドルして出荷します。

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

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


すばらしい答えですが、DirectXとランタイムを使用して開始しても意味がありません。まず第一には、DirectXの唯一のランタイムはCである。それは、それ自体で書かれている言語、内にある

@TomTurkeyあの...何?なぜそれが書かれている言語が重要なのですか?もちろん、必要なDirectXコンポーネントを直接実行可能ファイルに静的にリンクできますが、先ほど言ったように、多くのプログラムが大きなライブラリでこれを開始すると、ファイルサイズの問題が発生します(たとえば、Qt 4.xは約40 MB )。コードはどこかにある必要があり、必要なDirectXバージョンが既にシステムにインストールされていると仮定することはできません。または、パッチが適用されていないWindows XP SP2でプログラムを開いたときにエラーが発生します年齢。
allquixotic

4
ああ、あなたは私を誤解していると思う-私の答えでは、DirectX自体のインストールについては話していませんでした。DirectXに依存するプログラムのインストールについて話していました。その依存関係を満たすために、DirectXをアプリケーションに直接コンパイルして、無駄なディスク領域の消費量を増やすか、インストーラーに適切なDirectXランタイムがインストールされているかどうかを確認する小さなアプリをバンドルし、そうでない場合はそれらをダウンロードして、中央のシステムの場所にそれらを置きます。後者は、ディスク容量とダウンロードサイズの点ではるかに効率的です。
allquixotic

3
@allquixoticまた、ライセンス。場合によっては、ライブラリーはインストーラーとは関係なく再配布のライセンスが付与されない場合があります。DirectXがカテゴリに分類される可能性がありますが、わかりません。.NETフレームワークはそうだと思います。これは技術的な制限ではなく、法的制限です。(ただし、.NETフレームワークには追加の技術的な制限があります。OSにかなり緊密に統合されています。)
ボブ

1
ブープ。賛成のコメントの音。頭の中。
allquixotic

3

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

  1. .net frameworkバージョンなどの必要なライブラリ(api)がインストールされているか、直接Xか。

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

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

  4. あなたが言ったように、レジストリの変更。このステップは、実際にアプリケーションがこのコンピューターで最初に実行されたときに実行できるため、それほど重要ではありません。

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

「実行可能な」アプリケーションを検討しているため、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を使用する場合、すべてのオブジェクトを登録する必要があります。登録しないと、アプリケーションは必要なオブジェクトの作成に失敗し、起動しません。


1
共有コンポーネントのセキュリティ更新のために+1-私は答えにそれを書くとは思わなかった。
allquixotic

0

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

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

多くの場合、Universal Extractor(非公式の更新:ここ)を使用して、インストーラーの内容を抽出し、Windowsで管理者権限なしでプログラムを実行できます。MSIインストーラーはlessmsiで解凍できます。

他のほとんどのオペレーティングシステムでは、root / administrator権限なしで、ユーザー固有の「bin」、「lib」、およびホームディレクトリ内の他のディレクトリを介して、すべてのプログラムを実行できます。個人的には、ほとんどの場合、インストーラーを軽iseしています。なぜなら、インストーラーがないと、管理者権限のないプログラムを使用するのが難しくなるからです。しかし、それらは大企業によってそのようにパッケージ化されており、平均的なエ​​ンドユーザーのプロセスを簡素化します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.