Пользователь
0,0
рейтинг
4 октября 2013 в 19:26

Разработка → Автоматическая очистка старых драйверов, или выжмем немного места из Windows 7

В один прекрасный (или печальный, кому как) день мне надоело, что у меня периодически заканчивается место на ноутбуке. Да, я в курсе, что жёсткие диски сейчас дешевы, но это для меня не выход, потому что:
  • У меня SSD, а он всё-таки подороже будет, чем обычные HDD (объём моего текущего SSD — 120 гигов)
  • Ноутбук рабочий, соответственно данные на нём тоже, должны быть шифрованы, всё такое, поэтому самопальный и не утверждённое работодателем носитель втыкать не стоит
  • Я жадный :)

Этот топик, пожалуй, предназначен и может быть полезен тем людям, кого волнует свободное место на системном диске, обычные средства очистки уже испробованы, а хочется выжать ещё чуть-чуть (как в старом анекдоте — первая попавшаяся в гугле ссылка на анекдот, если сайт плохой — пардон).

В общем, я иногда чищу место на диске. Стандартные процедуры — очистка %TEMP%, очистка диска (стирает всякие там отчёты об ошибках, прикопанные системой на всякий пожарный, всякие memory dump'ы упавших процессов и прочее), снос ненужных более программ.
Однако, как я выяснил, есть папки, которые не чистит никто (от слова совсем). Ну в смысле из стандартных средств. И сейчас я хочу поговорить о папке %WINDIR%\System32\DriverStore.

Если у Вас эта папка занимает много-много места, а читать весь пост неохота — пожалуйте в самый его конец, там есть ссылки на github, откуда можно взять готовый результат моих изысканий и попробовать выжать (или отжать) немного места у винды.

Введение в проблему — что это за папка, зачем она нужна, кто виноват, что делать


Если порыться в интернетах, можно найти, что это то место, куда система про запас складывает вообще все драйвера, которые ей когда-либо попались по дороге. Да-да, и те, что были установлены для Вашей видеокарты три года назад, тоже лежат там, несмотря на то, что Вы их себе обновляли много-много раз.

Приведу немного теории с того самого MSDN:
Starting with Windows Vista, the driver store is a trusted collection of inbox and third-party driver packages. The operating system maintains this collection in a secure location on the local hard disk. Only the driver packages in the driver store can be installed for a device.

When a driver package is copied to the driver store, all of its files are copied. This includes the INF file and all files that are referenced by the INF file. All files that are in the driver package are considered critical to the device installation. The INF file must reference all of the required files for device installation so that they are present in the driver store. If the INF file references a file that is not included in the driver package, the driver package is not copied to the store.

The process of copying a driver package to the driver store is called staging. A driver package must be staged to the driver store before the package can be used to install any devices. As a result, driver staging and device installation are separate operations.

A driver package is staged to the driver store by being verified and validated


В моём вольном переводе получится что-то вроде:
В Windows Vista и позднее, хранилище драйверов используется как сборник доверенных предустановленных и сторонних драйверов. Операционная система поддерживает этот сборник в безопасном месте на локальном диске. Только те драйвера, которые лежат в хранилище, могут быть установлены.

Когда драйвер копируется в хранилище, туда попадают все его файлы, включая .INF файл и все файлы, на которые этот .INF ссылается. Все файлы, составляющие драйвер, считаются необходимыми для работы устройства. INF файл должен ссылаться на все файлы, необходимые для работы устройства, для того, чтобы они все попали в хранилище. Если .INF файл ссылается на файл, не входящий в драйвер, этот драйвер не копируется в хранилище.

Процесс копирования драйвера в хранилище называется staging (не стал пытаться выдумать термин, оставил английское слово — прим.пер.). Для того, чтобы драйвер мог быть использован для какого-либо устройства, он должен пройти процесс staging, таким образом, установка устройства и staging драйвера — отдельные операции.

Перед попаданием в хранилище драйвер проверяется на действительность подписи и целостность файлов.


Неужели всё так плохо, и никто не поможет?


Выглядит страшновато для влезания своими грязными руками, не правда ли? Однако тут есть небольшая (и не слишком удобная) соломинка от Microsoft, называется она pnputil.exe и умеет:
  • Перечислять драйвера, находящиеся в staging (но не входящие в стандартную поставку Вашей Windows, т.е. не интегрированные в установочный дистрибутив)
  • Добавлять драйвер в хранилище
  • Удалять драйвер из хранилища

Причём при удалении она проверяет, не используется ли удаляемый драйвер на данный момент для какого-нибудь подключенного устройства, и без опции /f (т.е. /force — заставить насильно) удалять такие драйвера отказывается.
Этой утилитой я и воспользовался.

Тут надо упомянуть, что я не первый такой умный, кто думал над этой проблемой, на codeplex есть проект по GUI приложению DriverStore Explorer, но он фактически является только графической обёрткой вокруг pnputil и никак не анализирует драйвера, предоставляя полную свободу своему пользователю.
Мне же, во-первых, искать вручную устаревшие версии драйверов было не очень охота, а во-вторых хотелось понять, что я выиграю от удаления того или иного драйвера (в смысле места на диске). Так что тут был синдром NIH в полный рост.
Поэтому я взял в руки Python и понеслось.

Ура, строим свой велосипед!


Методом пристального всматривания я обнаружил, что для того, чтобы найти наиболее свежую версию, достаточно данных от pnputil, а вот для определения размера — нет, потому что pnputil про драйвер говорит примерно следующее — кто сделал, когда, версия и имя INF файла. Какая из кучи папок в DriverStore относится к этому драйверу — он не говорит.
Вглядевшись ещё внимательнее в папочку %WINDIR%\Inf, я обнаружил там те самые .INF файлы (по именам), которые перечисляет pnputil, а заглянув в папки в DriverStore, обнаружил там… те же самые .INF файлы, но с другими именами — каждый в папке от своего драйвера.
Наверняка есть способ и попроще, но я пошёл в лоб — построил отображение от имени .INF файла в выдаче pnputil на папку в DriverStore, в которой лежит такой же по содержимому .INF файл (с другим именем). И взял размер этой папки за размер драйвера.

Теперь дело оставалось за малым — обернуть всё это в скрипты для удобного исполнения.
По дороге, правда, лежала подстава в виде UAC — pnputil работал только с администраторскими правами, а значит, надо было повышать привилегии из Питона. Беглое гугление дало несколько рецептов, которые говорили что-то вроде «можно сделать так, но вывода (и уж тем более ввода) не будет, как будете отлаживаться — без понятия», и меня это не устроило, так что я чуть-чуть доработал примеры.
Правда, моя реализация на данный момент неидеальна — она упадёт при попытке перенаправить stdout или stderr, потому что внутри я использую виндовое понятие консоли, а для перенаправленных потоков это не работает…
Но я пока закрыл на это глаза, потому что для починки надо городить чуть более сложный механизм, чем вызов FreeConsole/AttachConsole, т.е. заниматься перенаправлением всех потоков вручную.

Пробуем написанное на практике


А теперь, собственно, самый смак — результаты всей этой портянки текста. Можно брать, использовать на свой страх и риск, можно пробовать наносить добро и причинять пользу исходникам (MIT лицензия, да). Можно даже сказать мне спасибо в комментариях, если кому-то эти скрипты помогут :)
Релиз на github'e
Если качаете бинарную версию (интерпретатор зашит внутри) — берите ту, что соответствует разрядности операционки (32-битная версия на 64-битной ОС не найдет pnputil и работать, соответственно, не будет… если очень надо — пишите, можно попробовать это обойти).
Если берёте скриптовую версию — аналогично, запускать надо интерпретатором с разрядностью операционки.

Сам лично я это проверял на двух компьютерах с Windows 7, в теории должно работать на Vista и 8. На WinXP должно быть (вроде) бесполезно.
Скрипт проанализирует хранилище драйверов, постарается найти устаревшие версии драйверов (т.е. такие, для которых одновременно в staging находится более новая версия) и предложит их удалить, выдав оценку занимаемого драйверами места (и оценку выигрыша, разумеется, тоже).

Результат на моем ноутбуке

Лично мне удалось отжать порядка 6 гигабайт (!), в основном за счет удаления старых версий драйверов видеокарточки NVidia.
На другом ноутбуке всё оказалось не так радужно, удалось очистить всего 200 (по-моему) мегабайт, но там система жила существенно меньше моей и просто не успела накопить много драйверов.

Оба ноутбука с тех пор живут полной жизнью, в смысле никаких проблем от очистки я не заметил.

Если Вы досюда дочитали — спасибо за внимание!



Послесловие


Ожидаемо выяснилось, что скрипты по очистке работают не всегда, основная проблема — если Windows не англоязычный (как-то я не подумал, что и совсем служебные утилиты будут локализованы). Это я буду чинить. Основная масса проблем должна быть починена, см. релиз 1.0.1

Кроме того, для Windows 8 скрипты очистки, видимо, не актуальны, как справедливо указывает Skywrtr в своём комментарии.
Смотреть картинку для Win8
image
@JustAMan
карма
22,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (83)

  • 0
    У меня на win7 x64 не работает. Ну и ладно.
    Reading all OEM drivers…
    Traceback (most recent call last):
    File "", line 248, in File "", line 158, in main
    File "", line 108, in getAllDrivers
    __main__.PnpUtilOutputError: Unexpected pnputil.exe output start: ╤ыєцхсэр  яЁюуЁрььр PnP ╠рщъЁюёюЇЄ
    • 0
      Похоже скрипт ожидает английскую версию винды. Починил, выполнив перед запуском скрипта:

      chcp 65001


      Теперь падает с такой ошибкой :-(
      Reading all OEM drivers... done
      Reading oem*.inf files...
      Traceback (most recent call last):
        File "<string>", line 248, in <module>
        File "<string>", line 198, in main
      Exception: oem50.inf is duplicate of oem49.inf
      
      • 0
        Спасибо. Не заработала пока страницу не поменял. Почистила целых 153 из 1237 Мб =)
      • 0
        Да, писалось на английской. Надо будет поправить, может быть, даже с помощью этой chcp, спасибо :)
        А то, что у Вас случилось… это нечто странное. В %WINDIR%\Inf нашлось два одинаковых по содержимому .INF файла. Можно попробовать подумать, как с этим жить.
        • 0
          насколько заметил: при установке драйверов в режиме «выберу сам из указанного места», виндовс просто копирует еще один комплект. сами драйвера, видимо пишутся поверх, а вот inf — пишется как oem?? со счетчиком.
          Думаю, если нашлись совершенно одинаковые inf, все у которых меньшее значение, можно просто удалить.
        • 0
          Тут такая же фигня сулчилась. Два одинаковых файла. Что предпринять? Как починить?
          • 0
            Я пока не знаю. Желательно найти, каким драйверам они соответствуют, есть ли физические дубли в виде папок и всё такое.
            Я пока вижу два варианта действий:
            1. Если дублированы только .inf файлы, а драйвера реально хранятся в единственном экземпляре — игнорировать (удалять эти .inf-ы я бы в любом случае не стал)
            2. Если дублированы и сами драйвера в DriverStorage — удалять с наименьшим номером

            Попробуйте посмотреть в выводе pnputil -e, что за драйвера указаны на эти oem???.inf файлики, может, это нам что подскажет. Ещё (если не лень) поищите совпадающие по содержанию .inf'ы в подпапках %WINDIR%\System32\DriverStore\FileRepository, это поможет ответить на вопрос, дублируются ли драйвера в хранилище.
    • 0
      Кстати, починено, см. релиз 1.0.1
  • 0
    У меня win 8.1 Preview x64 — не работает
    Reading all OEM drivers…
    Traceback (most recent call last):
    File "", line 248, in File "", line 158, in main
    File "", line 108, in getAllDrivers
    __main__.PnpUtilOutputError: Unexpected pnputil.exe output start: ╤ыєцхсэр  яЁюуЁрььр PnP ╠рщъЁюёюЇЄ
    • 0
      Уже отвечали выше, видимо, у Вас русский Windows, попробуйте по рецепту выше.
    • 0
  • 0
    win7 x64 — работает, -1,6 Gb
  • +6
    На семерке больше всего места жрет бессовестно жиреющая папка winsxs, а от старых драйверов места будет с гулькин нос.
    • 0
      Воо, за то чтоб ее почистить или хотя бы почитать зачем нужно это нагромождение DLLек и как оно все работает, я готов многое отдать
      • +3
        • +1
          И ещё ссылка по теме:
          www.outsidethebox.ms/15302/
          • 0
            О, круто! Освободил 4 ГБ только с помощью «Очистки диска» с очисткой системных файлов.
      • 0
        Это да, эта папка толстая. Но, судя по беглому взгляду внутрь, там всё так или иначе нужно установленным программам, что, кстати, подтверждают комментарии ниже.
  • +1
    Мне пишет

    Reading all OEM drivers…
    Traceback (most recent call last):
    File "", line 248, in
    File "", line 158, in main
    File "", line 108, in getAllDrivers
    __main__.PnpUtilOutputError: Unexpected pnputil.exe output start: ╤ыєцхсэр  яЁюу
    Ёрььр PnP ╠рщъЁюёюЇЄ

    Win7-x64
    битность соблюл.
  • 0
    Оба ноутбука с тех пор живут полной жизнью, в смысле никаких проблем от очистки я не заметил.

    есть такой скрипт — WinsxsLite, чистит папку winsxs.
    сам он работает нормально, но после использования замечены проблемы при установке SP, и [скорее всего] обычных обновлений через WU или вручную через .exe/.msu
    здесь с этим точно все в порядке?

    тоже люблю удалять ненужное/лишнее, например очень бесит куча mui-файлов в папках с языками.
    • 0
      Было забавно, когда я запустил WinsxsLite на ноуте и после очистки у меня перестали 32-х битные приложения работать с инетом. Т.е. ie 64 единственный, который работал, а весь остальной софт сидел в глубоком оффлайне. До сих пор не пойму как так произошло, особенно с учетом, что на рабочем компе все прошло без каких либо проблем.

      Кстати, прилично места можно освободить, если поудалять кучу шрифтов (арабские, корейские, ну и просто ненужные)
    • 0
      Ну что значит «точно»? На моих пациентах проблем не обнаружено, удаляю я довольно безопасно, через вызов MS программы. Но гарантий я Вам не давал :)
      • 0
        Кстати спасибо, +6гб. места

        Win7 64-бит Ultimate, английская.
    • 0
      Да, кстати, в том же pyWinClobber у меня есть и скрипты для очистки .msi/.msp кэша винды, удаляют файлы, которые не зарегистрированы в Windows Installer Database. Правда, сюда про них писать не стал, уж больно выхлоп маленький от них был на моём ноутбуке — всего один несчастный беспризорный .msi нашёлся, на 16 Мб. Видимо, Винда стала более аккуратно отслеживать эти файлы, и они перестали плодиться.
  • +1
    как и в предыдущих 3-х комментариях, ошибка в строке 108 файла driver_cleanup.py, из-за того что проверяется на соответствие строка названия программы
    у меня, как и у предыдущих комментаторов, русифицированная винда, следовательно мне pnputil выдает 'Служебная программа PnP Майкрософт', а в программе проверяется 'Microsoft PnP Utility'
  • 0
    Старые драйверы можно почистить хитроватым способом, но без специальных программ через диспетчер оборудования (Device Manager — View — Show hidden devices). Наверное, они как раз в /DiverStore хранятся. Если нет — это ещё один пункт в бюджете очистки. На WinXP — такая же система.
    • +2
      Что-то я не вижу там старых драйверов нвидии, например.
    • 0
      так удаляет только записи старых устройств в реестре, но никак не файлы драйверов
      • +1
        самые интересные — скрытые, но не подключенные устройства (которые по умолчанию не показывает диспетчер устройств) можно увидеть так:
        1 устанавливаем переменную окружения devmgr_show_nonpresent_devices в значение 1 (на самом деле можно присвоить что угодно, только не 0)
        1.1 через командную строку:
        cmd.exe
        set devmgr_show_nonpresent_devices=1
        devmgmt.msc
        

        1.2 через гую: свойства системы->дополнительные параметры->дополнительно переменные среды. Далее, любимым образом запускаем диспетчер устройств
        2. в диспетчере устройств выбираем вид->показать скрытые устройства
        3. неподключенные устройства показываются серым цветом.
        4. заходим в устройство, вкладка драйвер->удалить. ставим галочку Удалить программы драйверов для этого устройства.
        вот так можно удалить драйвера от ранее подключенных в систему устройств (модемы, сетевые карты и пр)
  • 0
    Win8 x64

    Reading all OEM drivers… done
    Reading oem*.inf files… done
    Parsing DriverStore…
    Traceback (most recent call last):
    File "", line 248, in File "", line 215, in main
    IOError: [Errno 2] No such file or directory: 'C:\\Windows\\system32\\DriverStor
    e\\FileRepository\\mdmcpq.inf_amd64_d9e0b9c4fe044b4d\\mdmcpq.inf'
    • 0
      Ого… другая структура на восьмёрке, что ли?.. Можете прислать содержимое папки
      C:\Windows\system32\DriverStoe\FileRepository\mdmcpq.inf_amd64_d9e0b9c4fe044b4d\
      ?
      • 0
        Там только один файл «usbser.sys»
        db.tt/ieHRsqtp
        • 0
          Похоже на недокопированный драйвер… по крайней мере у меня такого не бывает.
          Видимо, такие драйвера надо просто игнорировать.
    • 0
      У вас большая папка DriverStore? Попробуйте, пожалуйста, применить стандартный инструмент очистки и посмотреть, что изменилось.
      • 0
        Нет, не назвал бы большой: 987 МБ.
        А стандартном инструменте очистки почему то отсутствует пункт «Пакеты драйверов устройств»
        • 0
          Там кнопка слева внизу «Очистить системные файлы».
  • 0
    Win7 x64 Pro Eng
    Reading all OEM drivers…
    Traceback (most recent call last):
    File "", line 248, in File "", line 158, in main
    File "", line 118, in getAllDrivers
    File "", line 77, in parseLine
    ValueError: too many values to unpack
    • 0
      Совсем забавно… можете сбросить мне в личку вывод «pnputil -e»?
  • 0
    Я кстати правильно понимаю, что удалять драйвера для устройств «которые на данный момент не используются» не идеальный подход? Ведь таким образом снесутся так же драйвера всего, что не воткнуто сейчас, но подключается время от времени (сканеры, принтеры, геймпады, тв-тюнеры и прочее).
    • +1
      Правильно понимаете. Но мой скрипт не удаляет драйвер только потому, что тот не используется.
      Он пытается найти и удалить старые версии драйвера, оставляя самую последнюю нетронутой.
      • 0
        Спасибо, был невнимателен.
    • 0
      Разве Windows сама не скачивает нужные ей драйвера в момент подключения устройства?
      Я за то, чтобы не хранить локально миллион ненужных драйверов, большинство из которых даже никогда не пригодятся, а добавить опцию в программу очистки удалять все неиспользуемые в данный момент драйвера.
      • 0
        Увы, на используемое мною железо (китайские фиговины, телефоны Huawei/Highscreen и т.п.) не находит драйверов, надо тянуться за дисками или искать самому. Нет, совет «не используйте такие железяки» мне не подходит.
        • 0
          Значит предложить список при очистке, и автоматически очищать именно те драйвера, которые есть на серверах MS, не трогая установленные вручную.
          • 0
            Интересно, каким образом отличать автоматически установленные от установленных вручную? Я способа не знаю, по крайней мере на данный момент.
            Можно, правда, добавить опцию типа «попробуй удалить всё подряд», тогда останутся только драйвера от того, что сейчас в систему воткнуто.
            • 0
              Обычно автоматически установленные драйвера имеют подпись от имени Microsoft.
              • 0
                Подпись от MS — это, как я понимаю, знак того, что драйвера прошли сертификацию, проверку или ещё что-то. Где они при этом физически хранятся — я не знаю. Например, драйвера NVidia у меня сертифицированы и подписаны MS, но ставил я их путём скачивания пакета драйверов с сайта (возможно, Windows и сама догадалась бы при установке сходить на сайт, я обновлял).
                • 0
                  Драйвера, вручную устанавливаемые с сайта nVidia, всегда содержат Copyright © nVidia, упоминания Microsoft там никогда не видел.

                  Кстати, у меня Windows 8, и в Disk Cleanup нет ни одной строчки, содержащей слово driver, как на скриншоте.
  • +1
    Еще была утилита, кторая ищет дубли библиотек, тоже огромное количество места высвобождать могла.
  • 0
    Microsoft Windows [Version 6.1.7601]
    Copyright © 2009 Microsoft Corporation. All rights reserved.

    C:\Users\Alex\Downloads\64-bit\64-bit>driver_cleanup.exe
    Reading all OEM drivers… done
    Reading oem*.inf files…
    Traceback (most recent call last):
    File "", line 248, in File "", line 198, in main
    Exception: oem171.inf is duplicate of oem170.inf

    C:\Users\Alex\Downloads\64-bit\64-bit>

  • 0
    Вот это разве не то же самое?

    • 0
      виноват, тут был левый комментарий :(
      • 0
        Говорит. Тем не менее, хотелось бы точно знать, что эта штука делает именно то, что описано в статье.
        • +1
          Ещё раз — виноват :(
          Убеждался у себя на двух экземплярах Win7, что не слепой и не мог пропустить такой пункт, а не заметил, что речь шла про Win8.
          Простите :)
    • +1
      Не знал, что такой пункт добавили. Здорово, я рад за пользователей Win8 :)
      • 0
        Пункт добавили а тольку нет. Есть куча старых драйверов нвидии и других устройств от 13 года, встроеная утилита показывает к очистке 0 байт
  • 0
    К слову о повышении привилегий окна командной строки. Утилита за авторством Сергея Ткаченко.
    • +1
      Или то же самое, но без .NET :)
      • 0
        Тогда, вдогонку, там еще в комментах есть намёк на NirCMD, через который тоже можно такое сделать.
        • 0
          Да понятно, везде же в конечном итоге идёт вызов WinAPI. Просто в моём случае я сделал обёртку для него на Python, вдруг кому пригодится…
          • 0
            Больше инструментов, хороших и разных! ;)
  • –7
    "Reading all OEM drivers…
    Traceback (most recent call last):
    File "", line 248, in File "", line 158, in main
    File "", line 108, in getAllDrivers
    __main__.PnpUtilOutputError: Unexpected pnputil.exe output start: ╤ыєцхсэр  яЁюу
    Ёрььр PnP ╠рщъЁюёюЇЄ"
    Руки таким программистам выдёргивать нужно.
  • 0
    Reading all OEM drivers…
    Traceback (most recent call last):
    File "", line 248, in File "", line 158, in main
    File "", line 118, in getAllDrivers
    File "", line 78, in parseLine
    File «C:\Vass\Dev\pyWinClobber\build\pyi.win32\pyWinClobber\out01-PYZ.pyz\_str
    ptime», line 325, in _strptime
    ValueError: time data '29/05/2008' does not match format '%m/%d/%Y'

    chcp 65001 писал
    такого пути у меня нет: C:\Vass\Dev
    • 0
      Понятно. Опять локализация меня кусает, на сей раз в формате даты… Блин %)
    • 0
      Fixed, кстати. :)
      • 0
        C:\Users\GDie\Downloads\64-bit (1)>driver_cleanup.exe
        Reading all OEM drivers…
        Traceback (most recent call last):
        File "", line 287, in File "", line 197, in main
        File "", line 157, in getAllDrivers
        __main__.PnpUtilOutputError: Cannot find suitable date format

        joxi.ru/hsVTUtg5CbC-TtD0DDg
        • 0
          Во блин, я же вроде это чинил и проверял… а скиньте в личку вывод «pnptuil -e», пожалуйста?
  • 0
    В win есть один очень жрущий файл «hiberfil.sys» (у меня на 13,4Гб).
    Если не нужна гибернация и сверхбыстрая загрузка, то можно «удалить» этот файл командой:
    powercfg  -h off 
    

    Скрытый текст

    • 0
      Обычно тех, кому нужно столько оперативки, какие-то 14 лишних гигабайт не заботит. :)
      • +1
        ссд же дорогие, вот у меня на 120гб. Сейчас не заботит, раньше, когда был на 60 — этот файл стал для меня откровением.
  • 0
    У кого русифицированная Windows — скиньте в личку вывод «pnputil -e», чтобы понять, от чего отталкиваться при разборе вывода.
    • 0
      Спасибо, скинули, можно больше пока не скидывать. :)
  • +1
    Постарался починить основные проблемы, связанные с локализацией, пробуем новый релиз: github.com/JustAMan/pyWinClobber/releases/tag/v1.0.1
    • 0
      Спасибо, теперь работает. Освободил 1,5 Gb.
  • 0
    Прошу прощения но вот моя ошибка:

    D:\TMP\64-bit>driver_cleanup.exe
    Reading all OEM drivers…
    Traceback (most recent call last):
    File "<string>", line 287, in <module>
    File "<string>", line 197, in main
    File "<string>", line 131, in getALLDrivers
     __main__.PnpUtilOutputError: Unexpected pnputil.exe output start:
    

    После «output start:» никаких кракозябров нет.
    Версию качал v1.0.1 для х64
    chcp 65001
    
    пробовал
    • 0
      chcp уже неактуально.

      Аналогично — сбросьте мне в личку вывод «pnputil -e» (выполняется в cmd.exe, запущенном с правами администратора)
  • 0
    «Очистка диска» в Windows 7 научилась удалять старые обновления и удалять лишние файлы из WinSxS:
    www.outsidethebox.ms/15444/
    • 0
      Глядишь, и очистку драйверов портируют… и можно будет выкинуть мои скрипты :)
      • 0
        Вряд ли из-за возможных проблем — некоторые приложения загружают драйверы только при активации определённых функций, так что скрипт их удалить и функционал перестанет работать.
  • 0
    У меня вот такое выдаёт (Win7 x64 SP1 Professional)

    C:\temp\pyWinClobber64bit>driver_cleanup.exe
    Reading all OEM drivers…
    Traceback (most recent call last):
    File "", line 248, in File "", line 158, in main
    File "", line 118, in getAllDrivers
    File "", line 77, in parseLine
    ValueError: too many values to unpack

    pastebin.com/Rj6S2Qev
  • 0
    Спасибо!!!
    Win 8 rus 64bit: -2384 Mb
  • 0
    Спасибо! Win 8.1 RU x64: -7848 Mb

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.