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