29

私は多かれ少なかれ趣味のプログラマーであり、.NETClickOnceの世界でコーディング的に成長してきました。

プログラムを「インストール」すると、実際に何が起こるのでしょうか。

また、いくつかの小さなアプリ/ツールは、exeから実行されます。ほとんどのプログラムに凝ったインストールプロセスが必要なのはなぜですか?長所、短所、長所と短所は何ですか?インストールは通常必要ですか、それとも標準的な方法のようですか?

余分な質問をお詫びします。私は、平易な英語の多かれ少なかれ素人が重要な要素について説明することを望んでいます。

4

6 に答える 6

36

あなたは本当に多くのレガシーな理由を見ていて、すべてがWindowsの世界で標準的な慣習になっていることに巻き込まれています。

まず、それが常にこのようであるとは限らないので、いくつかの対照。.appMac OS Xの「アプリケーション」は、拡張子が付いた名前が付けられた、特定の構造を持つディレクトリです。アプリケーションのインストールは、アプリケーション(アプリアイコンのみ)をアプリケーションフォルダーにドラッグするのと同じくらい簡単です。アンインストールには、アプリケーションをゴミ箱にドラッグする必要があります。それだけです、派手なインストーラーは(通常)必要ありません。

Windowsでは、アプリケーションは通常、「登録」する必要のある独立したコンポーネントから構築されます。これには、インストーラープログラムがWindowsレジストリにいくつかの断片を書き込んで、コンポーネントの場所をWindowsに指示することが含まれます。はい、アプリケーションはおそらくそれらを見つける場所を知っている必要があります(それらはすべて同じ場所にインストールされているため)が、長年のレガシーとコンポーネントを接続するさまざまな方法により、現在の場所に到達しました。

通常、Windowsへのインストールプログラムは次のとおりです。

  • ファイルをコピーします
  • コンポーネントを登録します
  • セキュリティ権限を設定します(適切な場合)
  • スタートメニューやデスクトップにアイコンを追加します
  • 「プログラムの追加と削除」にプログラムを追加するようにWindowsに指示するために、レジストリにさらに多くのものを書き込みます
于 2009-10-27T07:34:52.200 に答える
18

プログラムは、動作するようにコンピューターを変更しようとし、競合するすべての製品が失敗します。Windowsでは、これは次のことを意味します。

  • レジストリ内の任意のキーが遅くなり、壊れたエントリでいっぱいになるまで変更する

  • DLLをソフトウェアが使用できる単一の古いバージョンに置き換える

  • できるだけ多くの場所にできるだけ多くのファイルを広げる

  • ユーザーがOSを再インストールせずにソフトウェアを削除できるという幻想を維持するためのアンインストールスクリプトを作成します。万が一、ユーザーがこのスクリプトを実行しようとした場合、「ファイルは他のアプリケーションで使用されている可能性があります。本当に削除しますか?」などの質問で、これを二度と実行しないようにユーザーを教育できます。はい/いいえ/たぶん/任意の回答/すべての回答が正しい」

  • コンピュータの起動時にソフトウェアが実行されるように、あいまいな場所にフックをインストールします。それは起動プロセスを遅くするかもしれませんが、あなたのソフトウェアはすぐに起動するので、それはあなたのために支払うべき小さな代償です...。

  • 時間がかかるが、誰もあなたが何をしているのかわからないようなあいまいなことをする(「セットアップはインストールを準備しています」は15分間何をしますか?)

  • 十分なディスク容量があるかどうかを確認しますが、32ビット整数を使用して1TBディスクにインストールできないことを確認します。

  • 重要なタスクは、インストールに失敗し、「インストールに失敗しました。これは、ウイルス対策ソフトウェアがインストールされている可能性があります。非アクティブ化して、再試行してください。」というエラーを出力することです。これにより、ユーザーはアンチウイルスに不信感を抱き始め(特に、インストーラーのあいまいなバグがトリガーされなかったために2回目の実行中にインストールが成功した場合)、多くのユーザーがウイルススキャナーを再度有効にすることを忘れるか、いまいましいものをアンインストールすることさえ。

    世界中のウイルス作者も人です!スパムはインターネット上のトラフィックの大部分を占めています。これは、スパムが重要であり、地球上で最大のコミュニティの一員になりたくないということを意味しているに違いありません。その上、あなたはこの方法で大きなお金を稼ぐことができます。あなたがそれを必要とするのは、弱い良心および/またはいくつかの犯罪的エネルギーです。

  • インストーラーの非常に重要な部分は、レジストリキーを増やすことですHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-7-9-23-64738-1349283462-3754093625-4491\IsYourWindowWideEnough\NotGivenUpYetHuh\GoAway\ImportantSystemInformation\Let See How You Can Handle Spaces\DamnIGottaStopSincePathsCanHaveOnl\ReinstalCtr

    この重要なシステムカウンターは、ユーザーがシステム全体を再インストールしたいという強い衝動を感じるまで、ユーザーに不安定さの錯覚を与えるのに役立ちます。これは、プロのIT業界がサポート時間を販売し、新しいコンピューター、より多くのRAM、より大きなハードディスク、または新しいWindowsバージョンを販売するのに役立ちます(これらはより優れている必要がありますよね?)。

注:このテキストを真剣に受け止めている場合は、専門家の助けを求めてください。

于 2009-10-27T08:07:25.020 に答える
3

「派手な」インストールプロセスを使用する理由

  1. インストールプロセスを記録して、再生(修復)または元に戻す(アンインストール)ことができるようにします
  2. 単純なファイルコピー以外のアクションを実行する(レジストリキーの作成、コンポーネントの登録、その他の任意のアクションの実行)

ほとんどのインストールの「標準」オプションは、「プログラムファイルのように、標準の場所に通常必要なすべてのビット」をカスタマイズせずに、場合によってはエキスパートレベルの機能を有効にせずにインストールすることです。

于 2009-10-27T07:34:45.813 に答える
1

インストーラーは、便利で自給自足のユーザーインターフェイスを介して、通常はアーカイブ内に含まれているソフトウェアインフラストラクチャの複雑な部分を展開するプロセスを抽象化します。

このUIは、グラフィカルにすることも、UNIXシェル(bashなど)などのコマンドラインに出力されるテキストに基づくこともできます。グラフィカルインストーラーの場合、ほとんどの場合、いわゆるinstallation-bootstrapperが使用されます。後者の場合、インストールスクリプトは、bashスクリプト、Microsoftバッチスクリプト、またはコマンドラインで実行されるその他のスクリプト言語です。

最も単純なケースでは、アプリケーションは単に実行可能ファイルであり、オペレーティングシステムはファイルを実行するためにファイルをどのように処理するかを認識しています。アプリケーションファイルは、サブフォルダやその他の補助ファイルを含むフォルダにあり、1つのアーカイブにパックされている場合があります。この場合、インストーラーは必要ありません。

複雑なソフトウェアの場合、たとえばソフトウェア製品の著作権を強制するために、ソフトウェアプラットフォーム全体と基盤となるオペレーティングシステムインフラストラクチャとの緊密な統合が望ましい場合があります。

Windowsの多くのインストーラーは、/eまたは/extractフラグを提供します。たとえばsetup.exe /e、インストーラーがインストールスクリプトを実行せずに、アーカイブの内容を抽出できるようにします。私は最近それをする必要がありまし

考え方の変化

基盤となるソフトウェア資産がどれほど単純であっても、インストーラーはプロのソフトウェアを提供するための標準になりつつあります。コンピュータに精通したユーザーの数が増え、アプリケーションをあるデスクトップから次のデスクトップに移行したいという要望により、多くの場合単純なアーカイブで提供されるポータブルソフトウェアの人気が高まっています。

(インストーラーに費やした合計時間はわかりませんが、間違いなく数日程度です。)

インストーラーが処理できるタスクは次のとおりです。

  • 開梱(多くの場合、エキゾチックな高圧縮アーカイバを使用)
  • システムハードウェア要件の確保
  • 十分なハードディスク容量を確保する
  • ソフトウェアプラットフォームのランタイム要件の確保(例:「再配布可能」)
  • 新しいソフトウェアアップデートをチェックする
  • リモートリポジトリからソフトウェアをダウンロードする
  • プログラムファイルおよびフォルダの作成および/または更新
  • 構成ファイル、レジストリエントリ、または環境変数を作成します
  • ソフトウェアドライバをインストールし、デバイスをマウントまたはアンマウントします
  • インストール手順の説明、リンク、ショートカットの作成により、日常のユーザーのアクセシビリティを向上させます
  • ブックマークなどを通じて独自のソフトウェアを宣伝する...
  • インストール中にソフトウェアのキーポイントをスライドごとに提示することにより、ユーザーが実際にソフトウェアを起動するインセンティブを作成します
  • ソフトウェアのバンドルを通じて、追加の収益を生み出す
  • カーネルモジュールと自動的に実行されるコンポーネント(デーモン、Windowsサービスなど)を構成します
  • ソフトウェアの自動パッチ
  • フォルダ、ファイル、およびユーザーのアクセス許可を設定する
  • ソフトウェアをインストールインスタンスに結合し、移植性を防ぐためのUUID参照を作成する

PS:他の点について考えられる場合は、私に知らせてください。私はそれらを取り入れます。

于 2012-09-23T09:20:28.233 に答える
1

インストールするプログラムによって異なります。「インストール」は、(比較的小さい)実行可能ファイルをディレクトリにコピーすることから、共有ライブラリを設定すること、パッチレベルチェックを実行すること(SP2以降で実行するように設計されています-SP2以降を使用していますか?)、および変更することまで多岐にわたります。現在のユーザーまたはすべてのユーザーのシステム構成。それらのほとんどは、後で簡単にアンインストールできるように、インストールをパッケージマネージャーに登録します。

于 2009-10-27T07:31:46.863 に答える
1

ウィキペディアによると、一般的なインストーラーは以下を作成または変更します。

  • 共有および非共有プログラムファイル
  • フォルダ/ディレクトリ
  • Windowsレジストリエントリ(Windowsのみ)
  • 構成ファイルのエントリ
  • 環境変数
  • リンクまたはショートカット

したがって、プログラムでこれらの変更を1つ以上必要とする場合は、そのジョブを実行するインストーラーを作成する必要があります。

于 2009-10-27T07:33:27.517 に答える