古いドライバーを自動的にクリーニングするか、Windows 7から少しのスペースを絞り出します

ある晴れた日(または悲しいことに、誰かが好きな日)、私は定期的にラップトップのスペースを使い果たして疲れています。 はい、今ではハードドライブが安価であることは承知していますが、これは私にとって選択肢ではありません。



このトピックは、おそらくシステムディスクの空き領域を気にする人に役立つものであり、通常のクリーニングツールは既に試されていますが、もう少し絞り出したいと思います( 古いジョークのように、Googleで出会ったジョークへの最初のリンク悪い-ごめん)。



一般に、ディスク領域をクリーンアップすることがあります。 標準手順は、%% TEMP%のクリーニング、ディスクのクリーニング(すべての種類のエラーレポートを消去、すべての消防士のためにシステムによって掘り下げ、落下したプロセスのすべての種類のメモリダンプなど)、不要なプログラムの破壊です。

しかし、私が知ったように、 誰もきれいにしないフォルダがあります(単語から)。 まあ、標準的な意味で。 そして今、%WINDIR%\ System32 \ DriverStoreフォルダについてお話したいと思います。



このフォルダが多くのスペースを占有しているが、投稿全体を読みたくない場合は、最後までアクセスしてください。私の研究の最終結果を取得し、Windowsから少しスペースを絞る(または絞る)ことができるgithubへのリンクがあります。



問題の概要-このフォルダーとは何か、なぜ必要なのか、 誰が責任を負うのか、何をするのか



インターネットを調べてみると、これはシステムが道路上で出くわしたすべてのドライバーを予備として保存する場所であることがわかります。 はい、そうです。3年前にビデオカード用にインストールされたものも、あなたが何度も何度も自分で更新したにもかかわらず、そこにあります。



MSDNから少し理論を説明します。

Windows Vista以降、ドライバーストアは信頼できる受信トレイとサードパーティのドライバーパッケージのコレクションです。 オペレーティングシステムは、ローカルハードディスク上の安全な場所にこのコレクションを保持します。 デバイスにインストールできるのは、ドライバーストア内のドライバーパッケージのみです。



ドライバーパッケージがドライバーストアにコピーされると、そのすべてのファイルがコピーされます。 これには、INFファイルと、INFファイルによって参照されるすべてのファイルが含まれます。 ドライバーパッケージに含まれるすべてのファイルは、デバイスのインストールにとって重要であると見なされます。 INFファイルは、デバイスのインストールに必要なすべてのファイルを参照して、ドライバーストアに存在するようにする必要があります。 INFファイルがドライバーパッケージに含まれていないファイルを参照する場合、ドライバーパッケージはストアにコピーされません。



ドライバーパッケージをドライバーストアにコピーするプロセスは、ステージングと呼ばれます。 パッケージを使用してデバイスをインストールする前に、ドライバーパッケージをドライバーストアにステージングする必要があります。 その結果、ドライバーのステージングとデバイスのインストールは別々の操作になります。



ドライバーパッケージは、検証および検証されることにより、ドライバーストアにステージングされます。




無料の翻訳では、次のようなものが得られます。

Windows Vista以降では、ドライバーリポジトリは、信頼済みのプレインストールおよびサードパーティドライバーのコレクションとして使用されます。 オペレーティングシステムは、このコレクションをローカルディスク上の安全な場所に保持します。 リポジトリにあるドライバーのみをインストールできます。



ドライバーがリポジトリにコピーされると、.INFファイルおよびこの.INFが参照するすべてのファイルを含む、すべてのファイルがそこに到達します。 ドライバーを構成するすべてのファイルは、デバイスの操作に必要と見なされます。 INFファイルは、デバイスが機能するために必要なすべてのファイルを参照する必要があります。これにより、それらはすべてストレージに格納されます。 .INFファイルがドライバーに含まれていないファイルを参照している場合、このドライバーはリポジトリにコピーされません。



ドライバーをリポジトリーにコピーするプロセスは、ステージングと呼ばれます( 用語を考案しようとせず、英語の単語を残しました-約Per。 )。 ドライバーを任意のデバイスで使用するには、ステージングプロセスを実行する必要があるため、デバイスのインストールとドライバーのステージングは​​別々の操作です。



リポジトリに入る前に、ドライバは署名の有効性とファイルの整合性をチェックします。




すべてが本当にひどく、誰も助けてくれませんか?



汚れた手で登るのは怖いですね。 ただし、Microsoftからの小さな(非常に便利ではない)ストローがあり、 pnputil.exeと呼ばれ、次のことができます。



さらに、アンインストール時に、削除するドライバーが現在接続されているデバイスで使用されているかどうかを確認し、/ fオプション(つまり、/ force-force to force)なしで、そのようなドライバーの削除を拒否します。

このユーティリティを利用しました。



この問題を考えた最初の人ではないことをここで言及する必要があります.codeplexはGUIアプリケーションDriverStore Explorerにプロジェクトを持っていますが、実際にはpnputilの単なるグラフィカルラッパーであり、ドライバーを分析せず、ユーザーに完全な自由を与えます。

まず第一に、私は本当に古いドライバーを手動で探したくありませんでした。そして、第二に、ドライバーを削除することの恩恵を受けることを理解したかったです(ディスク容量の点で)。 そのため、全長NIH症候群がありました。

だから私はPythonを手に入れて始めました



やあ、自転車を作ろう!



綿密に調べてみると、最新バージョンを見つけるにはpnputilからの十分なデータで十分ですが、ドライバーについてのpnputilはINFファイルのバージョンと名前を次のように言っているため、サイズを決定することはできません。 DriverStore内のどのヒープのフォルダーがこのドライバーを参照しているか-話しません。

%WINDIR%\ Infフォルダをさらに詳しく見ると、pnputilがリストする(名前で)同じ.INFファイルが見つかりました。DriverStoreのフォルダを見ると、同じ.INFファイルが見つかりましたが、名前は異なります-各ドライバーのフォルダー内。

確かに簡単な方法がありますが、pnputil出力の.INFファイルに代わって、内容に同じ.INFファイル(別の名前)を含むDriverStoreのフォルダーへのマッピングを直接作成しました。 そして、このフォルダーのサイズをドライバーのサイズに合わせました。



これは、便利な実行のためにこれらすべてをスクリプトでラップするという小さなタスクに任されていました。

ただし、途中でUACのセットアップがありました。pnputilは管理者権限でのみ機能しました。つまり、Pythonから特権を増やす必要がありました。 簡単なグーグルが「この方法でできるが、結論が出ない(さらに入力が少ない)、デバッグ方法はわからない-わからない」などのようなレシピをいくつか提供しましたが、私にはうまくいきませんでした。例。

確かに、私の実装は現在不完全です-内部でWindowsコンソールの概念を使用しているため、stdoutまたはstderrをリダイレクトしようとするとクラッシュしますが、リダイレクトされたフローではこれは機能しません...

しかし、今のところ私はこれに目を閉じています。それを修正するには、FreeConsole / AttachConsoleを呼び出すよりも少し複雑なメカニズムをブロックする必要があるためです すべてのスレッドを手動でリダイレクトします。



実際に書いてみます



そして今、実際のところ、最も素晴らしいのは、このテキスト全体の結果です。 あなたはそれを取って、あなた自身の責任でそれを使うことができます、あなたはソースに良いことをしようとすることができます(MITライセンス、はい)。 これらのスクリプトが誰かを助けてくれるなら、コメントで私に感謝することさえできます:)

Githubリリース

バイナリバージョンをダウンロードする場合(インタープリターは内部で配線されています)-OSのビットサイズに対応するものを使用します(64ビットOSの32ビットバージョンはpnputilを見つけられず、それに従って動作しません...本当に必要な場合は、これを回避してみてください)。

スクリプトバージョンを使用する場合-同様に、少しのOSでインタープリターを実行する必要があります。



私はWindows 7を搭載した2台のコンピューターでこれを個人的にチェックしました。理論的にはVistaと8で動作するはずです。WinXPでは(無意味)役に立たないはずです。

スクリプトは、ドライバーリポジトリを分析し、古いドライバーバージョン(つまり、新しいバージョンが同時にステージングにあるもの)を見つけようとし、それらを削除することを提案し、ドライバーが占めるスペースの見積もり(そしてもちろん、ゲインの見積もり)を提供します。



ラップトップでの結果


個人的には、主にNVidiaビデオカードドライバーの古いバージョンが削除されたため、約6ギガバイト(!)を圧縮できました。

別のラップトップでは、すべてがそれほどバラ色ではないことが判明し、わずか200メガバイト(私の意見では)をクリアすることができましたが、システムは私のものよりはるかに少なく、多くのドライバーを蓄積することができませんでした。



以来、両方のラップトップは完全な生活を送っていますが、クリーニングの問題がないという意味で、私は気づいていません。



ここを読んでいる場合-ご清聴ありがとうございました!





あとがき



クリーニングスクリプトが常に機能するとは限らないことが予想されました。主な問題は、Windowsが英語でない場合です(ユーティリティユーティリティがローカライズされるとは思わなかった)。 修理します。 ほとんどの問題は修正する必要があります。 リリース1.0.1を参照してください



さらに、Windows 8の場合、 Skywrtr彼のコメントで正しく指摘しているように、クリーニングスクリプトは明らかに無関係です。

Win8の画像を表示
画像







All Articles