回答:
場合によります。
インストールされているソフトウェアがオペレーティングシステムの不可欠な部分に影響する場合は、再起動が必要です。たとえば、オペレーティングシステム用の新しいカーネル。
Windowsシステムでは、ユーザーが愚かすぎてコンピューターを適切に使用できないと考えられるため、よく使用されます。例として、Microsoftは、Webサイトでネットワークに使用される「ノードタイプ」を変更する方法の詳細を公開しています。これには、ここで詳述するネットワークサービスの再起動のみが必要な場合の「コンピューターの再起動」の指示も含まれます。ユーザーが愚かすぎてサービスを再起動できないため、すべてを再起動するよう指示されているためです。
一部のソフトウェアについては、それは習慣であり、そうするように言われた場合でも必要ないことが多いという結論に達しました。あるソフトウェアがオペレーティングシステムにとって重要なことを何もするべきではないと思うなら、私は気にせず、何の問題も経験していません(そして問題があれば簡単に解決できるでしょう)。
ソフトウェアの一部が、コンピューターの使用中に有効にならない変更を加える場合があります。いくつかの理由が考えられます-ファイルが使用中、変更はコンピューターの起動中にのみ発生する可能性があり、コンピューターがネットワークをアクティブにする前にのみ実行できるセキュリティ問題がある可能性があり、ウイルススキャナーが干渉する可能性がありますインストール。
時々、それは開発者による単なるずさんなプログラミングです。
もっとたくさんあると思います。
多くの場合、新しいソフトウェアをインストールするときに、他の多くのソフトウェアパッケージで使用されるdll(ファイル)を新しいバージョンにアップグレードする必要があります。(これは、インストール済みのアプリケーションをアップグレードする場合によく起こります。)
dllが実行中のアプリケーションによって使用されている場合、その一部はメモリにロードされ、残りは必要に応じてディスクから読み取られます。したがって、dllはディスク上でロックされます。(ロックされていない場合の問題を考えてください!)
ロックされているDLLは更新できないため、インストーラーは、次回マシンを再起動するときに、DLLを新しいバージョンに置き換えるようにウィンドウに要求します。したがって、再起動の必要性。
いくつかの優れたインストーラーは、インストーラーを実行する前に閉じる必要があるアプリケーションを教えてくれるので、再起動せずにDLLを更新できます。 ただし、インストーラーのUIがより複雑になり、サポートの呼び出しが増えます。
アプリケーションのインストーラーは、アプリケーションに状態を保存させ、シャットダウンしてから、DLLの更新後に再起動することもできます。これは、DLLが単一のアプリケーションで使用されている場合にのみ実行できます。ほとんどの自己更新アプリケーションはこれを行います。これは、多くのユーザーがいる大衆市場アプリケーションの標準です。
上記のすべてが、テストが難しい複雑なロジックにつながる可能性があります。ユーザーのマシンがどのような状態にあるかを推測する必要があるため、インストーラーのテストには時間がかかります。したがって、インストーラーは、ユーザーがさらに再起動する場合でも、シンプルで常に機能することが最善です。 。
ユーザーがインストーラーの再起動のために別のアプリケーションを購入することを決定することはあまりないため、ベンダーはユーザーにアプリケーションを購入させるために必要な作業に時間(お金)を費やします。
再起動時に自分自身を整理するアプリケーションをインストールした後、どのくらいの頻度で問題が発生しましたか?再起動するだけで解決される問題に電話をかける多くのユーザーのサポートコストを考えてください。ソフトウェアをインストールした後、それが不要だと思われる場合でも、常にユーザーに再起動を行わせることは、開発者として非常に魅力的です。
ほとんどのオペレーティングシステムとソフトウェアは、ディスクスペースとメモリに多くの費用がかかっていた時代に作成されました。現在、アプリケーションが使用するすべてのdllのプライベートコピーを使用するための動きがあります。したがって、消しゴムをアップグレードしますが、より多くのストレージスペースを使用します。
サーバーではこれは「コンテナ」で行われますが、「コンテナ」はデスクトップソフトウェアではうまく機能しません。1つのアプリケーションで保存されたデータに別のアプリケーションでアクセスできるようにしたいからです。(それ以外の場合は、iPhoneを使用します。)
理由は、そうしないとクラッシュするからです。レイモンド・チェンから:
使用中のファイルを置き換えても、古いバージョンを使用したいコードがシステムに残っている場合があります。たとえば、連携する2つのファイルがあるとします。
- A.dll
- B.dll
両方のファイルを更新するパッチを発行します
A.dll
が、使用中です。問題ない。両方を単純に置き換えるだけです。その結果、まだ使用していたプログラムA.dll
は古いバージョンを使用し続けますが、新しいプログラムは新しいバージョンを使用します。そして、すべてのプログラムがの新しいバージョンを取得しB.dll
ます。今、古いものを使用していたプログラムは
A.dll
、関数を呼び出すことにしました。当然、古いバージョンのを期待しますB.dll
が、代わりに新しいバージョンを取得します。に加えた変更の種類に応じてB.dll
、この呼び出しは機能するか、クラッシュする場合があります。両方のDLLは、そのパートナーが同じ一致セットからのものであると想定しています。
正直に言うと、ソフトウェア開発者にとっては、更新によって常に再起動が行われると想定する作業が少なくなります(したがって、$$が少なくなります)。これはおそらく、開発者と同じくらいBeanカウンターの決定です。
最終的には、理想的な世界では再起動なしでは実行できないアップデートはほとんどありませんが、システムが持つ可能性のあるさまざまな構成を考えると、多くの事前計画が必要であり、いくつかのリスクがあります。
いくつかの大きな問題を引き起こすことなく、実行中のコードを変更することが非常に難しいという事実に関係しています。解決策:コードを変更する前にすべてを停止します。これにより、何も実行されていないことを確認できます。それはおそらく必要とされる多くの場合、ほとんど不要なブルートフォースハックですが、特に重要なコードを更新する場合は特に必要です。実際に、この特に重要なコードの再起動を必要としない更新を行うことに特化した会社全体があります。彼らがそれを行う方法は、このペーパーhttp://www.ksplice.com/paperにあります。
Windowsの重要なシステムファイルが変更されている場合、Windowsはこれらのファイルが使用中に変更されることを許可しないため、再起動する必要があります。そのため、Windows Updateからのほとんどの更新プログラムは、それ自体をWindowsに統合するプログラム(ウイルス対策プログラムなど)と同様に、再起動が必要です。再起動するまで、Windowsはプログラムの「インストール」に必要な最後のいくつかの手順を実行できません。
これをLinuxと比較できますが、Linuxを再起動する必要はほとんどありません。再起動するように求められた場合でも、通常はログアウトと再ログインのみが必要です。これは、一般的なLinux環境は、連携して完全なOSを作成する多くの異なるプログラムで構成されるためです。インストール中に重要なファイルが変更された場合、通常はそのファイルを使用する特定のプログラムを再起動するだけで十分です。