Ошибка 0xc004d307 как исправить

Fix Error 0xc004d307

Are you getting “Error 0xc004d307: The maximum allowed number of re-arms has been exceeded error message while trying to convert a not genuine windows operating system to genuine?

If YES then don’t worry as you can easily deal with this issue. This error message may appear when you run the “SLMGR -REARM” command more than three times.

To error 0xc004d307, we recommend Advanced System Repair tool:

This software is your one stop solution to fix Windows errors, protect you from malware, clean junks and optimize your PC for maximum performance in 3 easy steps:

  1. Download Advanced System Repair tool rated Excellent on Trustpilot.
  2. Click Install & Scan Now to install & scan issues causing the PC problems.
  3. Next, click on Click Here to Fix All Issues Now to fix, clean, protect and optimize your PC effectively.

The command “SLMGR -REARM” is used to convert the trial version of Windows 7 to full version, and during the conversion process of not genuine windows to genuine windows, you may get the error 0xc004d307 when you have tried this command for more than three times.

In this tutorial you will learn the different techniques to fix Error 0xc004d307 or the maximum number of rearms exceeded windows 7 or slmgr rearm not working after reboot “Error 0xc004d307: The maximum allowed number of re-arms has been exceeded”.

As above discussed, while converting not genuine windows to genuine, you may receive this error message (Error 0xc004d307). You can’t run the SLMGR – REARM command more than three times and when the user exceeds the limit this error pops up.

In order to get rid of this error message, you have to reinstall the OS (Operating System). But, if you want to remove Error 0xc004d307 without reinstalling OS then you can do it by following the given steps. But before applying the solutions let’s know what happened when the user run SLMGR -REARM command more than 3 times.

When you execute the command SLMGR -REARM more than 3 times then the value of the “SkipRearm” registry key will turn to “0”. So, we have to change the “SkipRearm” registry key to “1”.

To do this we have to find out the “SkipRearm” key using the registry editor window, the whole process is given below.

1: Open the run dialogue box, by pressing the “Windows + R” keys. After opening the run box, type “Regedit” and press the Enter key. This command will open up the Registry editor window.

Now we have to follow the below-given path:

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVersion/SoftwareProtectionPlatform

2: Click on the arrow mark present along with “HKEY_LOCAL_MACHINE”.

3: Click on the arrow mark present along with “SOFTWARE”.

4: Click on the arrow mark present along with “Microsoft”.

5: Click on the arrow mark present along with “Windows NT”.

6: Click on the arrow mark present along with “CurrentVersion”.

7: After it, you have to click on the word “SoftwareProtectionPlatform

8: Now, right-click on the “SkipRearm” present in the right window.

9: Click on the “Modify” and here change the “Value Data” to “1”.

10: At last, reboot your computer.

Now you can run the command SLMGR -REARM and convert your non-genuine Windows to a genuine operating system without any error message.

Check Your Windows PC/Laptop Health

You can also scan your system with the PC Repair Tool, this tool is designed with an advanced algorithm and help you scan, detect, and fix various PC related issues and errors.

It will automatically scan your entire system and fix several issues related to the registry database, DLL errors, driver confliction, system file integrity, and more. And the most important part of this tool, you don’t need any professional experience to operate it as this software is completely automatic and deal with those errors that you can’t fix manually.

Get PC Repair Tool, to fix errors and optimize Windows PC performance

Conclusion

After applying the above-given technique you can easily convert the trial version of Windows 7 to the full version. But it is recommended to apply the above-discussed solutions very carefully as a small mistake while operating the Windows registry may affect your entire computer.

If you don’t have the knowledge to operate the registry keys then you should avoid these steps and contact a professionally skilled person.

You can also run the automatic Registry Repair Tool, to fix corrupted, damaged registry entries automatically.

Despite this, we would like to hear from you, share your valuable comments, suggestions, or queries on our Facebook page.

Good Luck..!

Always up to help others with their PC-related issues, Jack loves to write on subjects such as Windows 10, Xbox, and numerous technical things. In his free time, he loves to play with his dog “Bruno” and hang out with his friends.

asel75

Чтобы повторить попытку сброса таймера активации, переустановите ОС.
Как Вы понимаете, Windows из интернета. Варианты переустановки не предлагать (читать я умею). Пользовался раз 10 вот этим пакетом:
пакет для удаления проверки на подленность win7
1. Запустить RemA-удалит предыдущую активацию(потребуеться перезагрузка)
2. Запускаем 7600_RTM_V7.0 (10.08.2009) и активируем свой win7 (потребуеться перезагрузка)
3. Запускаем Remove WGA — убирает проверку на подленность (потребуеться перезагрузка)
ВО ВРЕМЯ ВЫПОЛНЕНИЯ ОПЕРАЦИЙ ЖЕЛАТЕЛЬНО ОТКЛЮЧИТЬ СОЕДИНЕНИЕ С ИНТЕРНЕТОМ!
Теперь не выходит… Пакет mini-KMS_Activator_1.053_(07-24-2010) облегчения тоже принес (выбирал нижнюю строку активации Windows).
Какие есть варианты?

Impils

Какой выпуск Windows 7? Корпоративная?

elenangel

1) Купить винду.
2) Снести винду и установить линукс.

asel75

Windows 7 ultimate
рад тебя читать, rialto!

asel75

А что у всех теперь линуксы стоят?
А как мне прочий софт использовать: MS SQL Server, Skype, браузеры, офис. Не всё, наверное, есть под линукс. Где мне столько софта найти и где бы почитать про настройку/администрирование? Я думаю, это потребует отдельной квалификации.

nas1234

держи
но если у тебя уже именно и срок последней активации истек, то не уверен что поможет, но попробуй. если «до активации осталось Х дней», то поможет.

svetaslav212

А что у всех теперь линуксы стоят?

А почему ты проигнорировал первый вариант?

Kira

тогда купи винду. Она не столь дорого стоит, учитывая зарплаты форумчан в 150к.

marat7256

MS SQL Server, Skype, браузеры, офис.

Postgres, Skype, firefox, LibreOffice.

asel75

Я думаю, что обсуждение зарплат необходимо отнести в форум Работа. Здесь обсуждается ПО и оборудование. Просьба придерживаться Правил.

viktor954

Ну тогда и ты придерживайся правил:

Правило 0. No crack or warez here!

asel75

Даже залез посмотреть.
Действительно с 08.09.08 (дата кризиса) новые Правила.

asel75

Не знаю, на долго ли.
Но помогло.
Респект. Спасибо.

elenangel

Skype, браузеры, офис

есть под линукс

MS SQL Server

сам по себе нужен? или в связке с какой-то программой? серверов баз данных есть множество.

Где мне столько софта найти

в репозиториях

и где бы почитать про настройку/администрирование?

google, wiki соответствующего дистрибутива, wiki соответствующего программного продукта, документация/man, книжки и статьи, тысячи их, я гарантирую это.

Я думаю, это потребует отдельной квалификации.

не большей чем для взлома вёнд-антивирусов, борьбы с глюками и ограничениями винды.

Содержание

  1. Сброс тестового периода для терминального сервера Windows
  2. Описание проблемы
  3. Сброс пробного периода
  4. Windows Server 2016 Evaluation Edition: сброс триала, upgrade до Standart/Datacenter
  5. Хочу Знать
  6. Как изменить, удалить или продлить лицензию Windows
  7. Во-первых: откройте командную строку с правами администратора
  8. Просмотр информации об активации/лицензии
  9. Просмотр даты истечения срока действия лицензии
  10. Как удалить ключ продукта
  11. Как установить или изменить ключ продукта
  12. Сброс таймера активации windows server 2016

Описание проблемы

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

Сброс пробного периода

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

В данном разделе реестра необходимо удалить значение реестра с названием начинающимся на L$RTMTIMEBOMB. , однако, скорее всего ничего не выйдет, поскольку по умолчанию у пользователей компьютера нет прав на внесение изменений в данном разделе. Для исправления данного недоразумения, необходимо открыть разрешения данного раздела, и сменить его владельца на Администраторы.

Делается это следующим образом:

  1. На нужном разделе реестра нужно нажать правой кнопкой мыши, и в появившемся меню выбрать пункт «Разрешения».
  2. Откроется список разрешений. В нем нужно нажать на кнопку «Дополнительно».
  3. Откроются дополнительные параметры, где в самом верху будет написан владелец, а рядом будет кнопка «Изменить». Нажимаем на неё.
  4. Откроется окошко, где нужно будет ввести имя группы администраторов — например «Administrators». Для корректировки названия в понятный системе формат следует нажать на кнопку «Проверить имена».

    Если все будет правильно, система подчеркнет название группы, после чего остается только выйти из всех ранее открытых окон, нажимая кнопки «ОК» (для применения новых разрешений).

После этого, остается только удалить значение реестра с названием L$RTMTIMEBOMB. , после чего перезагрузить сервер. Если все было сделано правильно, то пробный период будет активирован по новой, и пользователи смогут работать на данном сервере как раньше.

Windows Server 2016 Evaluation Edition: сброс триала, upgrade до Standart/Datacenter

Версия для оценки Windows Server 2016 Evaluation Edition доступна для скачивания с официального сайта Microsoft. Версия имеет полный функционал и нормально работает в течении триального периода (180 дней).Беда заключается в том, что по истечении триального периода сервер пишет в логи:

Процесс C:Windowssystem32wlmswlms.exe ( ) инициировал действие «Завершить работу» для компьютера от имени пользователя NT AUTHORITYСИСТЕМА по причине: Другое (Запланированное)
Код причины: 0x80000000
Тип выключения: Завершить работу
Комментарий: Истек срок действия лицензии для этой установки Windows. Компьютер завершает работу.

Такая ситуация имеет два варианта решения: Вариант 1 (не правильный) — сбросить триальный период. Вариант 2 (правильный) — обновить до нормальной версии и активировать через KMS-сервер или с помощью MAK/Retail ключа.

Вариант 1. Сброс триала.

Запускаем Powershell и вводим команду:

Дожидаемся сообщения «Command completed successfully» и перезагружаем сервер.

Вариант 2. Upgrade до Standard/Datacenter.

Проверяем что стоит Evaluation Edition.

Должно быть: Current Edition ServerStandardEval.

Смотрим список доступных версий

Выбираем нужную версию и выполняем апгдейд с помощью общедоступного KMS-ключа.

Для версии Standard:

Для версии Datacenter:

Далее можно активировать операционку через KMS-сервер либо MAK/Retail ключом.

Хочу Знать

Версия для оценки Windows Server 2016 Evaluation Edition доступна для скачивания с официального сайта Microsoft. Версия имеет полный функционал и нормально работает в течении триального периода (180 дней).Беда заключается в том, что по истечении триального периода сервер пишет в логи:

Процесс C:Windowssystem32wlmswlms.exe ( ) инициировал действие «Завершить работу» для компьютера от имени пользователя NT AUTHORITYСИСТЕМА по причине: Другое (Запланированное)
Код причины: 0x80000000
Тип выключения: Завершить работу
Комментарий: Истек срок действия лицензии для этой установки Windows. Компьютер завершает работу.

Такая ситуация имеет два варианта решения: Вариант 1 (не правильный) — сбросить триальный период. Вариант 2 (правильный) — обновить до нормальной версии и активировать через KMS-сервер или с помощью MAK/Retail ключа.

Вариант 1. Сброс триала.

Запускаем Powershell и вводим команду:

Дожидаемся сообщения «Command completed successfully» и перезагружаем сервер.

Вариант 2. Upgrade до Standard/Datacenter.

Проверяем что стоит Evaluation Edition.

Должно быть: Current Edition ServerStandardEval.

Смотрим список доступных версий

Выбираем нужную версию и выполняем апгдейд с помощью общедоступного KMS-ключа.

Для версии Standard:

Для версии Datacenter:

Далее можно активировать операционку через KMS-сервер либо MAK/Retail ключом.

Для преобразования Windows Server 2019 EVAL в полноценную версию нужно использовать GVLK (KMS) ключи для Windows Server 2019. В остальном процедура аналогичная.

Конвертировать Windows Server 2019 Evaluation в Windows Server 2019 Standard:

dism /online /set-edition:ServerStandard /productkey: N69G4-B89J2-4G8F4-WWYCC-J464C /accepteula

Конвертировать Windows Server 2019 Evaluation в Windows Server 2019 Datacenter:

dism /online /set-edition:ServerDatacenter /productkey:WMDGN-G9PQG-XVVXX-R3X43-63DFG /accepteula

Как изменить, удалить или продлить лицензию Windows

Активация Windows — достаточно простая и понятная процедура (ну хотя бы более менее), чем то, что мы собираемся рассмотреть далее в этой статье. Как быть, если вы хотите сделать с лицензией что-то более продвинутое и сложное, например, такие вещи как, как удалить/изменить ключ продукта, выполнить онлайн активацию или продлить время активации. Это не так просто как простая активация, которая выполняется стандартными средствами ОС с удобным графическим интерфейсом, но и не так сложно. В этой статье я дам вам информацию, как и с помощью чего это можно сделать.

Существует инструмент командной строки, называемый Slmgr.vbs, входящий в состав Windows и предоставляющий возможности, недоступные в стандартном интерфейсе активации, который находиться в окне «Обновление и безопасность» до которого можно дойти, открыв меню Пуск и выбрав Параметры.

Во-первых: откройте командную строку с правами администратора

Для использование Slmgr.vbs это необходимо. В Windows 10 или 8 щелкните правой кнопкой мыши по кнопке Пуск (или сочетание клавиш Win + X) и выберите «Командная строка (администратор)». В Windows 7 найдите командную строку в меню Пуск, в списке Все программы > Служебные. Нажмите на нее правой кнопкой и выберите «Запустить от имени администратора».

Просмотр информации об активации/лицензии

Для отображения базовой информации о лицензии и активационной информации, выполните команду ниже, которая скажет вам, какая у вас версия Windows, часть ключа продукта, чтобы вы могли идентифицировать и покажет вам, активирована ли система.

Чтобы получить более подробную информацию о лицензии, включая ID активации, ID установки, и другие детальные сведения введите следующую команду:

Просмотр даты истечения срока действия лицензии

Чтобы узнать срок текущей активации системы, используйте команду ниже. Так как розничные лицензии, скажем, для домашних компьютеров активация идет на бессрочной основе, что никогда не истечет, команда будет полезна для коммерческих организаций KMS и серверов. Тем не менее вы можете проверить срок годности вашей лицензии, и убедиться что она постоянная.

Как удалить ключ продукта

С помощью Slmgr.vbs вы также можете удалить ключ продукта текущей системы Windows. После выполнения команды ниже, перезагрузите компьютер и ваша операционная система не будет иметь ключа продукта, что означает, Windows станет неактивным — без лицензии.

Это позволяет вам перенести лицензию на другой компьютер, если это необходимо. К примеру, если вы хотите подарить старый компьютер другу, а лицензию хотите оставить себе. Однако, как известно, активация Windows будет «привязана» к оборудованию компьютера, на котором она установлена, поэтому просто так сделать перенос не получится, но все же это возможно, но сейчас не об этом (это будет в следующих статьях).

Чтобы удалить лицензионный ключ, введите в командную строку следующую команду:

Однако команда не удаляет активацию полностью. Windows также хранит ключ продукта в реестре, потому как это иногда необходимо при настройках компьютера, а также для предотвращения кражи ключа вредоносными программами, которое могут получить доступ к реестру. Кроме этого будущий владелец компьютера (если он более менее разбирается в компьютерах) может легко вытащить ключ из реестра, так что вы также должны обязательно удалить его из реестра следующей командой:

Как установить или изменить ключ продукта

С помошью slmgr.vbs вы можете ввести новый ключ продукта. Если система Windows уже активирована, используя нижеприведенную команду вы можете заменить старый ключ на новый действующий (вместо #####-#####-#####-#####-##### введите новый ключ). После этого рекомендуется выполнить перезагрузку компьютера.

Также это можно сделать в экране настроек активации в параметрах компьютера, но следующая команда позволяет сделать это из командной строки:

Сброс таймера активации windows server 2016

а я тебе очём в личке писал!? а ты походу не дочитал до-конца.

Запустите командную строку (cmd) от имени Администратора, введите команду:
slmgr.vbs –rearm
или
slmgr /rearm
Перезагрузитесь.
Вы получите еще 30 дней. Общий срок 120 дней, сброс можно делать только 3 раза.
slmgr /xpr выводит дату и время окончания льготного периода
slmgr /dli количество минут (дней) оставшихся до окончания льготного периода

1) Создать командный файл delwpa.bat в корне диска C:

reg load HKLMMY_SYSTEM «%

dp0WindowsSystem32configsystem»
reg delete HKLMMY_SYSTEMWPA /f
reg unload HKLMMY_SYSTEM

2) Перезагрузить компьютер и нажать F8, чтобы войти в Дополнительные варианты загрузки.

3) Выбрать восстановление компьютера, выбрать язык ввода, ввести свой Логин и открыть окно командной строки.

4) Перейти на диск C:.
Выполнить:
delwpa.bat
Консоль должна отобразить сообщение, что команды были выполнены успешно. Закрыть окно консоли и перезагрузить компьютер.

5) Войти в Windows, игнорировать сообщение «Этот продукт не является подлинным», открыть командную строку от имени администратора и выполнить:
slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
Где XXXXX-XXXXX-XXXXX-XXXXX-XXXXX, ключ вашего издания по умолчанию в зависимости от используемой версии Windows 7:
Ultimate — D4F6K-QK3RD-TMVMJ-BBMRX-3MBMV
Professional — HYF8J-CVRMY-CM74G-RPHKF-PW487
Home Premium — RHPQ2-RMFJH-74XYM-BH4JX-XM76F
Home Basic — YGFVB-QTFXQ-3H233-PTWTJ-YRYRV
Starter — 7Q28W-FT9PC-CMMYT-WHMY2-89M6G
Затем перезагрузить компьютер.

6) После перезагрузки запустить в командной строке от имени администратора:
slmgr /dlv
Должны получить окно с данными.
Состояние Лицензии: первоначальный льготный период
Оставшееся время: 30 дней
Оставшееся число возвращений к исходному состоянию активации Windows: 4

Windows позволит вам сделать сброс 4 раза, после этого, следуя руководству,
можно снова восстановить количество реармов.

Ещё один возможный способ.

Цитата: Я так с реармами колдовал. После чистой установки системы менял в реестре по адресу
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSoftwareProtectionPlatform значение ключа
SkipRearm с 0 на 1.
Использовал все реармы. После того как реармов не стало, при очередном сбросе, система мне сказала что
пора переставлять ОС. Естественно я с ней не согласился и в реестре по адресу
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSoftwareProtectionPlatform изменил значение
ключа SkipRearm с 1 на 0 т.е все вернул обратно. Это дало мне еще один реарм, но после него система снова
предложила переустановиться, но я сменил 0 на 1 и снова был реарм. В общем после окончания 4-х «встроенных»
реармов для продления перед каждым реармом надо менять значение в реестре. Смысл уловили?

#2521

Отправлено 26 Сентябрь 2014 — 16:31

_0_

    Elit Member

  • Участники
  • 4 984 сообщений

К сожалению не один не активировался.

Пишет — введенный ключ не может использоваться для активации на этом компьютере.

Можете еще чем то помочь, может еще активатор какой посоветуете или ключи.

Чем ранее пытались активировать OS?

Пропишите любой представленный выше ключ и выполните команду:

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытый текст

и предоставьте скрин в студию

PS Активацию по телефону еще никто не отменял

Сообщение отредактировал ZIK_: 26 Сентябрь 2014 — 16:32

  • Наверх

#2522


veremi1

Отправлено 26 Сентябрь 2014 — 16:32

Пишет — введенный ключ не может использоваться для активации на этом компьютере.

Ну и ключи хорошие ключи, годятся для

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытый текст

Если  бы написало, что ключ заблокирован, тогда другое дело

Experto credite

  • Наверх

#2523


максо

Отправлено 26 Сентябрь 2014 — 16:34

максо

    Читатель

  • Участники
  • 19 сообщений

Чем ранее пытались активировать OS?

Пропишите любой представленный выше ключ и выполните команду:

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытый текст

и предоставьте скрин в студию

да ни чем, только активатором из шапки, только что винду переустановил.

  • Наверх

#2524


_0_

Отправлено 26 Сентябрь 2014 — 16:42

_0_

    Elit Member

  • Участники
  • 4 984 сообщений

да ни чем, только активатором из шапки, только что винду переустановил.

Не хотите возиться с ключами, можно:
* переустановить OS с перебивкой HDD с GPT в MBR (нужно просто правильно записать установочную USB флешку использовав утилиту Rufus) — тогда утилита от DAZ сработает
* сделать мод Bios (надо знать точную модель МП) и провести OEM активацию

Сообщение отредактировал ZIK_: 26 Сентябрь 2014 — 16:43

  • Наверх

#2525


максо

Отправлено 26 Сентябрь 2014 — 16:43

максо

    Читатель

  • Участники
  • 19 сообщений

что то опять никак  :(  , что то мелко скрин

<a target=»_blank» href=»

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытый текст

«><img

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытый текст

></a>

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытый текст

Сообщение отредактировал максо: 26 Сентябрь 2014 — 16:46

  • Наверх

#2526


_0_

Отправлено 26 Сентябрь 2014 — 16:49

_0_

    Elit Member

  • Участники
  • 4 984 сообщений

что то опять никак  :(  , что то мелко скрин

Выполняйте команды через cmd с повышенными правами 

cmd-admin.png

Сообщение отредактировал ZIK_: 26 Сентябрь 2014 — 16:50

  • Наверх

#2527


максо

Отправлено 26 Сентябрь 2014 — 17:04

максо

    Читатель

  • Участники
  • 19 сообщений

Ребята Огромное спасибо. Все получилось, активировал по телефону одним из ключей , что выше.

Большое спасибо 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытый текст

 и  

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытый текст

благодарен 

:)

  • Наверх

#2528


trionon

Отправлено 03 Октябрь 2014 — 04:54

trionon

    Читатель

  • Участники
  • 4 сообщений

Ноутбук HP c предустановленной ОS  7 Home Basic CA. Установил 7 максимальную. При вводе retal ключей пишет что данный ключ не подходит для вашего компьютера. Подскажите где искать?             

  • Наверх

#2529


_0_

Отправлено 03 Октябрь 2014 — 06:44

_0_

    Elit Member

  • Участники
  • 4 984 сообщений

Ноутбук HP c предустановленной ОS  7 Home Basic CA. Установил 7 максимальную. При вводе retal ключей пишет что данный ключ не подходит для вашего компьютера. Подскажите где искать?             

Достаточно было прописать OEM SLP ключ и OEM сертификат т.к. в Bios присутствует SLIC 2.1

PS Можно воспользоваться утилитой из шапки темы, при наличии SLIC 2.1 в Bios — пропишет нужный ключ и сертификат. 

Сообщение отредактировал ZIK_: 03 Октябрь 2014 — 06:46

  • Наверх

#2530


trionon

Отправлено 03 Октябрь 2014 — 10:08

trionon

    Читатель

  • Участники
  • 4 сообщений

:help:Если можно подробнее порядок действий в такой ситуации, т.к. я не понял что такое ОЕМ SLP ключ и ОЕМ сертификат, и где их взять, и что за утилита SLIC 2.1? По вашим советам не раз активировал по телефону, а тут не получается…

  • Наверх

#2531


_0_

Отправлено 03 Октябрь 2014 — 11:45

_0_

    Elit Member

  • Участники
  • 4 984 сообщений

:help:Если можно подробнее порядок действий в такой ситуации, т.к. я не понял что такое ОЕМ SLP ключ и ОЕМ сертификат, и где их взять, и что за утилита SLIC 2.1?

Ваш ноутбук поставлялся с предустановленной OS (7 Home Basic) с OEM онлайн активацией. В Bios присутствует таблица SLIC 2.1, в OS прописан ОЕМ:SLP ключ (HP) + ОЕМ сертификат (HP) = что в итоге даёт онлайн активацию.
В данном случае,  после установки Win 7 Максимальная Вам достаточно прописать в систему ОЕМ:SLP ключ (HP) + ОЕМ сертификат (HP) и система автоматом активируется т.к. в Bios присутствует SLIC 2.1 — данные действия можно выполнить:
* запустить утилиту (DAZ) из шапки темы, утилита автоматом определит вендора по SLIC 2.1 и пропишет нужный ОЕМ:SLP ключ (HP) редакции и ОЕМ сертификат (HP)
* можно руками прописать ключ и сертификат

По вашим советам не раз активировал по телефону, а тут не получается…

Надеюсь OS ставили не сборку?

Сообщение отредактировал ZIK_: 03 Октябрь 2014 — 13:44

  • Наверх

#2532


trionon

Отправлено 03 Октябрь 2014 — 17:08

trionon

    Читатель

  • Участники
  • 4 сообщений

Оказалось всё так просто. Скачал DAZ c шапки темы (по первой ссылке, правда в архиве вирус). Программа автоматически определила устройство и ОС,  и подобрала ключи. После чего система запросила активации через интернет. Активация прошла успешно. Спасибо ЗИК!

  • Наверх

#2533


_0_

Отправлено 03 Октябрь 2014 — 20:33

_0_

    Elit Member

  • Участники
  • 4 984 сообщений

 После чего система запросила активации через интернет.

:blink: Странно, при OEM (SLIC 2.1 + ОЕМ:SLP + ОЕМ сертификат) активации, оная проходит офлайн.

Может быть было предложено пройти проверку подлинности?  Которую Вы успешно прошли.

  • Наверх

#2534


trionon

Отправлено 04 Октябрь 2014 — 05:35

trionon

    Читатель

  • Участники
  • 4 сообщений

Да, точно — было предложено пройти проверку подлинности, ещё раз спасибо!

  • Наверх

#2535


vasya797

Отправлено 08 Октябрь 2014 — 15:29

vasya797

    Читатель

  • Участники
  • 3 сообщений

Привет!!
сегодня столкнулся с такой проблемой  «ошибка 0xc004d307 превышено максимально допустимое число сбросов таймера активации» , у меня пиратка windows 7 максимальная , это после того выскакивает когда я прогу устанавливаю и он убирает проверку на подлинность windows и так было много и много раз ,это прога меня выручало , а сегодня вылезла это ошибка «ошибка 0xc004d307 превышено максимально допустимое число сбросов таймера активации». Не хочется винду переустанавливать ,народ помогите..

  • Наверх

#2536


_0_

Отправлено 08 Октябрь 2014 — 16:03

_0_

    Elit Member

  • Участники
  • 4 984 сообщений

Привет!!
сегодня столкнулся с такой проблемой  «ошибка 0xc004d307 превышено максимально допустимое число сбросов таймера активации» , у меня пиратка windows 7 максимальная , это после того выскакивает когда я прогу устанавливаю и он убирает проверку на подлинность windows и так было много и много раз ,это прога меня выручало , а сегодня вылезла это ошибка «ошибка 0xc004d307 превышено максимально допустимое число сбросов таймера активации». Не хочется винду переустанавливать ,народ помогите..

Какую прогу устанавливаете?

  • Наверх

#2537


vasya797

Отправлено 08 Октябрь 2014 — 21:57

vasya797

    Читатель

  • Участники
  • 3 сообщений

2 или 3 года назад в инете выкопал  «full_hack_pack_win7» , хорошая прога и обновлять можно …

нихочется переустанавливать ,пол дня потеряю и инет у меня сейчас с ограниченным трафикам

  • Наверх

#2538


_0_

Отправлено 09 Октябрь 2014 — 01:41

_0_

    Elit Member

  • Участники
  • 4 984 сообщений

2 или 3 года назад в инете выкопал  «full_hack_pack_win7» , хорошая прога и обновлять можно …

нихочется переустанавливать ,пол дня потеряю и инет у меня сейчас с ограниченным трафикам

Ключевая фраза: «хорошая прога и обновлять можно …» Так может быть прогу можно обновить и проблема уйдет? Лирика.

Есть только одна утилита (в шапке темы) от DAZ (не вносит изменений в систему), все остальные — недоактиваторы.

Для того, чтобы Вам помочь, надо увидеть MGADiag отчет.

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытый текст

, обсуждение там же.

  • vovtchik это нравится
  • Наверх

#2539


CrazyDiamond

Отправлено 14 Октябрь 2014 — 13:20

CrazyDiamond

    Читатель

  • Участники
  • 13 сообщений

Добрый день уважаемые. Есть ли рабочий ключик на Window 7 64 Pro ?

  • Наверх

#2540


_0_

Отправлено 14 Октябрь 2014 — 13:30

_0_

    Elit Member

  • Участники
  • 4 984 сообщений

Добрый день уважаемые. Есть ли рабочий ключик на Window 7 64 Pro ?

Чем утилита из шапки темы не устраивает?

Живые MAK ключи с активацией по телефону:

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытый текст

  • Наверх

Были ли у вас ошибки активации после обновления до Windows 11/10? Коды ошибок активации Windows часто встречаются в только что установленных версиях операционной системы. В этом посте объясняется, что означает ошибка, как она возникает и как ее можно исправить.

Коды ошибок активации Windows и решения

В случае обновления до следующей версии Windows 11 или Windows 10 последняя версия Windows сохранит серийный номер вашей предыдущей версии и сведения об активации. Затем эти данные сохраняются на серверах Microsoft вместе с информацией о вашем компьютере. Вот некоторые из распространенных кодов ошибок активации, которые могут возникнуть в Windows 11/10:

1] Код ошибки (0xC004C001 — 0xC004C012)

Код ошибки Описание
0xC004C001 Сервер активации определил, что указанный ключ продукта недействителен.
0xC004C002 Сервер активации определил наличие проблемы с указанным ключом продукта.
0xC004C003 Сервер активации определил, что указанный ключ продукта заблокирован.
0xC004C004 Сервер активации определил, что указанный ключ продукта недействителен.
0xC004C005 Сервер активации определил, что лицензия недействительна
0xC004C006 Сервер активации определил, что лицензия недействительна
0xC004C007 Сервер активации определил, что указанный ключ продукта недействителен.
0xC004C008 Сервер активации определил, что указанный ключ продукта не может быть использован
0xC004C009 Сервер активации определил, что лицензия недействительна
0xC004C010 Сервер активации определил, что указанный ключ продукта недействителен.
0xC004C011 Сервер активации определил, что лицензия недействительна
0xC004C012 На сервере активации произошла сетевая ошибка

2] Код ошибки (0xC004B001 — 0xC004B100)

Код ошибки Описание
0xC004B001 Сервер активации определил, что лицензия недействительна
0xC004B002 Сервер активации определил, что лицензия недействительна
0xC004B003 Сервер активации определил, что лицензия недействительна
0xC004B004 Сервер активации определил, что лицензия недействительна
0xC004B005 Сервер активации определил, что лицензия недействительна
0xC004B006 Сервер активации определил, что лицензия недействительна
0xC004B007 Сервер активации сообщил, что компьютеру не удалось подключиться к серверу активации
0xC004B008 Сервер активации определил, что компьютер не может быть активирован
0xC004B009 Сервер активации определил, что лицензия недействительна
0xC004B011 Сервер активации определил, что часы вашего компьютера неверны. Вы должны исправить свои часы, прежде чем вы сможете активировать
0xC004B100 Сервер активации определил, что компьютер не может быть активирован

3] Код ошибки (0xC004C00A — 0xC004C00F)

Код ошибки Описание
0xC004C00A Сервер активации определил, что лицензия недействительна
0xC004C00B Сервер активации определил, что лицензия недействительна
0xC004C00C На сервере активации произошла ошибка
0xC004C00D Сервер активации определил, что лицензия недействительна
0xC004C00E Сервер активации определил, что указанный ключ продукта недействителен.
0xC004C00F Сервер активации определил, что указанный ключ продукта недействителен.

4] Код ошибки (0xC004C013 — 0xC004C023)

Код ошибки Описание
0xC004C013 На сервере активации произошла ошибка
0xC004C014 На сервере активации произошла ошибка
0xC004C015 На сервере активации произошла ошибка
0xC004C016 Сервер активации сообщил, что указанный ключ продукта нельзя использовать для онлайн-активации.
0xC004C017 Сервер активации определил, что указанный ключ продукта заблокирован для этого географического местоположения.
0xC004C020 Сервер активации сообщил, что ключ многократной активации превысил свой лимит
0xC004C021 Сервер активации сообщил, что превышено ограничение на расширение ключа многократной активации.
0xC004C022 Сервер активации сообщил, что лимит перевыпуска не найден
0xC004C023 Сервер активации сообщил, что запрос переопределения не найден

5] Код ошибки (0xC004C013 — 0xC004C023)

Код ошибки Описание
0xC004C030 Сервер активации сообщил, что предпринята попытка активации на основе времени до даты начала.
0xC004C031 Сервер активации сообщил, что попытка активации на основе времени была предпринята после даты окончания.
0xC004C032 Сервер активации сообщил, что новая активация по времени недоступна.
0xC004C033 Сервер активации сообщил, что ключ продукта на основе времени не настроен для активации.
0xC004C050 На сервере активации произошла общая ошибка
0xC004C04F Сервер активации сообщил, что нет доступных бизнес-правил для активации указанного ключа продукта.

6] Код ошибки (0xC004C401 — 0xC004C781)

Код ошибки Описание
0xC004C401 Служба Vista Genuine Advantage Service определила, что установка не является подлинной.
0xC004C600 Служба Vista Genuine Advantage Service определила, что установка не является подлинной.
0xC004C700 Сервер активации сообщил, что бизнес-правило не находит требуемый ввод.
0xC004C750 Сервер активации сообщил, что для имени и идентификатора бизнес-свойства указано значение NULL.
0xC004C751 Сервер активации сообщил, что имя свойства указывает на неизвестное свойство
0xC004C752 Сервер активации сообщил, что идентификатор свойства указывает на неизвестное свойство.
0xC004C755 Сервер активации сообщил, что ему не удалось обновить привязку ключа продукта.
0xC004C756 Сервер активации сообщил, что ему не удалось вставить привязку ключа продукта.
0xC004C757 Сервер активации сообщил, что ему не удалось удалить привязку ключа продукта.
0xC004C758 Сервер активации сообщил, что ему не удалось обработать входной XML для привязки ключей продукта.
0xC004C75A Сервер активации сообщил, что ему не удалось вставить свойство ключа продукта.
0xC004C75B Сервер активации сообщил, что ему не удалось обновить свойство ключа продукта.
0xC004C75C Сервер активации сообщил, что ему не удалось удалить свойство ключа продукта.
0xC004C764 Сервер активации сообщил, что тип ключа продукта неизвестен
0xC004C770 Сервер активации сообщил, что тип ключа продукта используется другим пользователем.
0xC004C780 Сервер активации сообщил, что ему не удалось вставить запись ключа продукта.
0xC004C781 Сервер активации сообщил, что ему не удалось обновить запись ключа продукта.

7] Код ошибки (0xC004C801 — 0xC004C816)

Код ошибки Описание
0xC004C801 Сервер активации определил, что указанный ключ продукта недействителен.
0xC004C802 Сервер активации определил, что указанный ключ продукта недействителен.
0xC004C803 Сервер активации определил, что указанный ключ продукта был отозван.
0xC004C804 Сервер активации определил, что указанный ключ продукта недействителен.
0xC004C805 Сервер активации определил, что указанный ключ продукта недействителен.
0xC004C810 Сервер активации определил, что указанный ключ продукта недействителен.
0xC004C811 Сервер активации определил, что лицензия недействительна
0xC004C812 Служба лицензирования программного обеспечения сообщила, что хранилище лицензий содержит противоречивые данные.
0xC004C813 Сервер активации определил, что лицензия недействительна
0xC004C814 Сервер активации определил, что указанный ключ продукта недействителен.
0xC004C815 Сервер активации определил, что лицензия недействительна
0xC004C816 Сервер активации сообщил, что указанный ключ продукта нельзя использовать для онлайн-активации.

8] Код ошибки (0xC004E001 — 0xC004E010)

Код ошибки Описание
0xC004E001 Служба лицензирования программного обеспечения определила, что указанный контекст является недопустимым.
0xC004E002 Служба лицензирования программного обеспечения сообщила, что хранилище лицензий содержит противоречивые данные.
0xC004E003 Служба лицензирования программного обеспечения сообщила, что оценка лицензии не удалась.
0xC004E004 Служба лицензирования программного обеспечения сообщила, что лицензия не прошла оценку
0xC004E005 Служба лицензирования программного обеспечения сообщила, что лицензия не активирована
0xC004E006 Служба лицензирования программного обеспечения сообщила, что лицензия содержит неверные данные
0xC004E007 Служба лицензирования программного обеспечения сообщила, что в хранилище лицензий нет запрошенной лицензии.
0xC004E008 Служба лицензирования программного обеспечения сообщила, что свойство лицензии недействительно.
0xC004E009 Служба лицензирования программного обеспечения сообщила, что хранилище лицензий не инициализировано.
0xC004E010 Служба лицензирования программного обеспечения сообщила, что свойство лицензии отсутствует

9] Код ошибки (0xC004E00A — 0xC004E00F)

Код ошибки Описание
0xC004E00A Служба лицензирования программного обеспечения сообщила, что хранилище лицензий уже инициализировано.
0xC004E00B Служба лицензирования программного обеспечения сообщила, что свойство лицензии недействительно.
0xC004E00C Служба лицензирования программного обеспечения сообщила, что лицензия не может быть открыта или создана.
0xC004E00D Служба лицензирования программного обеспечения сообщила, что лицензия не может быть записана
0xC004E00E Служба лицензирования программного обеспечения сообщила, что хранилище лицензий не может прочитать файл лицензии.
0xC004E00F Служба лицензирования программного обеспечения сообщила, что свойство лицензии повреждено.

10] Код ошибки (0xC004E011 — 0xC004E022)

Код ошибки Описание
0xC004E011 Служба лицензирования программного обеспечения сообщила, что хранилище лицензий содержит недействительный файл лицензии.
0xC004E012 Служба лицензирования программного обеспечения сообщила, что магазину лицензий не удалось правильно запустить синхронизацию.
0xC004E013 Служба лицензирования программного обеспечения сообщила, что хранилище лицензий не удалось правильно синхронизировать.
0xC004E014 Служба лицензирования программного обеспечения сообщила, что свойство лицензии недействительно.
0xC004E015 Служба лицензирования программного обеспечения сообщила, что использование лицензии не удалось
0xC004E016 Служба лицензирования программного обеспечения сообщила, что ключ продукта недействителен.
0xC004E017 Служба лицензирования программного обеспечения сообщила, что ключ продукта недействителен.
0xC004E018 Служба лицензирования программного обеспечения сообщила, что ключ продукта недействителен.
0xC004E019 Служба лицензирования программного обеспечения определила, что проверка указанного ключа продукта не удалась.
0xC004E020 Служба лицензирования программного обеспечения сообщила о несоответствии между значением политики и информацией, хранящейся в разделе OtherInfo.
0xC004E021 Служба лицензирования программного обеспечения сообщила, что информация о подлинности, содержащаяся в лицензии, не соответствует
0xC004E022 Служба лицензирования программного обеспечения сообщила, что значение идентификатора защищенного хранилища в лицензии не соответствует текущему значению.

11] Код ошибки (0xC004E01A — 0xC004E01F)

Код ошибки Описание
0xC004E01A Служба лицензирования программного обеспечения сообщила, что обнаружена неверная информация о надстройке.
0xC004E01B Служба лицензирования программного обеспечения сообщила, что не вся информация об оборудовании может быть собрана
0xC004E01C Этот пробный ключ продукта больше не действителен.
0xC004E01D Новый ключ продукта нельзя использовать в этой установке Windows. Введите другой ключ продукта. (CD-АВ)
0xC004E01E Новый ключ продукта нельзя использовать в этой установке Windows. Введите другой ключ продукта. (АБ-АБ)
0xC004E01F Новый ключ продукта нельзя использовать в этой установке Windows. Введите другой ключ продукта. (AB-CD)

12] Код ошибки (0x8004E101 — 0x8004E109)

Код ошибки Описание
0x8004E101 Служба лицензирования программного обеспечения сообщила, что версия файла Token Store недействительна.
0x8004E102 Служба лицензирования программного обеспечения сообщила, что хранилище токенов содержит недопустимую таблицу дескрипторов.
0x8004E103 Служба лицензирования программного обеспечения сообщила, что хранилище токенов содержит токен с недопустимым верхним/нижним колонтитулом.
0x8004E104 Служба лицензирования программного обеспечения сообщила, что токен Token Store имеет недопустимое имя.
0x8004E105 Служба лицензирования программного обеспечения сообщила, что токен Token Store имеет недопустимое расширение.
0x8004E106 Служба лицензирования программного обеспечения сообщила, что в хранилище токенов содержится дубликат токена.
0x8004E107 Служба лицензирования программного обеспечения сообщила, что токен в магазине токенов имеет несоответствие размера
0x8004E108 Служба лицензирования программного обеспечения сообщила, что токен в магазине токенов содержит недопустимый хэш.
0x8004E109 Служба лицензирования программного обеспечения сообщила, что магазину токенов не удалось прочитать токен.

13] Код ошибки (0x8004E10A — 0x8004E10E)

Код ошибки Описание
0x8004E10A Служба лицензирования программного обеспечения сообщила, что Token Store не удалось записать токен.
0x8004E10B Служба лицензирования программного обеспечения сообщила, что хранилище токенов предприняло попытку недопустимой операции с файлом.
0x8004E10C Служба лицензирования программного обеспечения сообщила об отсутствии активных транзакций.
0x8004E10D Служба лицензирования программного обеспечения сообщила, что заголовок файла Token Store недействителен.
0x8004E10E Служба лицензирования программного обеспечения сообщила, что дескриптор токена Token Store недействителен.

14] Код ошибки (0xC004F001 — 0xC004F009)

Код ошибки Описание
0xC004F001 Служба лицензирования программного обеспечения сообщила о внутренней ошибке
0xC004F002 Служба лицензирования программного обеспечения сообщила, что использование прав не удалось
0xC004F003 Служба лицензирования программного обеспечения сообщила, что не удалось найти требуемую лицензию.
0xC004F004 Служба лицензирования программного обеспечения сообщила, что ключ продукта не соответствует диапазону, указанному в лицензии.
0xC004F005 Служба лицензирования программного обеспечения сообщила, что ключ продукта не соответствует ключу продукта для лицензии.
0xC004F006 Служба лицензирования программного обеспечения сообщила, что файл подписи для лицензии недоступен
0xC004F007 Служба лицензирования программного обеспечения сообщила, что не удалось найти лицензию
0xC004F008 Служба лицензирования программного обеспечения сообщила, что не удалось найти лицензию
0xC004F009 Служба лицензирования программного обеспечения сообщила, что льготный период истек
0xC004F010 Служба лицензирования программного обеспечения сообщила, что ключ продукта недействителен.

15] Код ошибки (0xC004F001 — 0xC004F009)

Код ошибки Описание
0xC004F00A Служба лицензирования программного обеспечения сообщила, что идентификатор приложения не соответствует идентификатору приложения для лицензии.
0xC004F00B Служба лицензирования программного обеспечения сообщила, что идентификационные данные продукта недоступны.
0x4004F00C Служба лицензирования программного обеспечения сообщила, что приложение работает в течение допустимого льготного периода.
0x4004F00D Служба лицензирования программного обеспечения сообщила, что приложение работает в течение допустимого льготного периода вне допуска.
0xC004F00E Служба лицензирования программного обеспечения определила, что данная лицензия не может использоваться текущей версией компонента процессора безопасности.
0xC004F00F Служба лицензирования программного обеспечения сообщила, что привязка идентификатора оборудования выходит за пределы допуска.

16] Код ошибки (0xC004F011 — 0xC004F020)

Код ошибки Описание
0xC004F011 Служба лицензирования программного обеспечения сообщила, что файл лицензии не установлен
0xC004F012 Служба лицензирования программного обеспечения сообщила, что вызов не удался, так как не найдено значение для входного ключа.
0xC004F013 Служба лицензирования программного обеспечения определила, что нет разрешения на запуск программного обеспечения.
0xC004F014 Служба лицензирования программного обеспечения сообщила, что ключ продукта недоступен.
0xC004F015 Служба лицензирования программного обеспечения сообщила, что лицензия не установлена
0xC004F016 Служба лицензирования программного обеспечения определила, что запрос не поддерживается
0xC004F017 Служба лицензирования программного обеспечения сообщила, что лицензия не установлена
0xC004F018 Служба лицензирования программного обеспечения сообщила, что лицензия не содержит действительных данных о местоположении сервера активации.
0xC004F019 Служба лицензирования программного обеспечения определила, что запрошенный идентификатор события недействителен.
0xC004F020 Служба лицензирования программного обеспечения определила, что пакет лицензии недействителен.

17] Код ошибки (0xC004F01A — 0xC004F01F)

Код ошибки Описание
0xC004F01A Служба лицензирования программного обеспечения определила, что запрошенное событие не зарегистрировано в службе.
0xC004F01B Служба лицензирования программного обеспечения сообщила, что идентификатор события уже зарегистрирован.
0xC004F01C Служба лицензирования программного обеспечения сообщила, что лицензия не установлена
0xC004F01D Служба лицензирования программного обеспечения сообщила, что проверка лицензии не удалась
0xC004F01E Служба лицензирования программного обеспечения определила, что тип входных данных не соответствует типу данных в лицензии.
0xC004F01F Служба лицензирования программного обеспечения определила, что лицензия недействительна.

18] Код ошибки (0xC004F021 — 0xC004F029)

Код ошибки Описание
0xC004F021 Служба лицензирования программного обеспечения сообщила, что срок действия лицензии истек
0xC004F022 Служба лицензирования программного обеспечения сообщила, что авторизация лицензии не удалась.
0xC004F023 Служба лицензирования программного обеспечения сообщила, что лицензия недействительна.
0xC004F024 Служба лицензирования программного обеспечения сообщила, что лицензия недействительна.
0xC004F025 Служба лицензирования программного обеспечения сообщила, что для действия требуются права администратора.
0xC004F026 Служба лицензирования программного обеспечения сообщила, что необходимые данные не найдены
0xC004F027 Служба лицензирования программного обеспечения сообщила, что лицензия подделана
0xC004F028 Служба лицензирования программного обеспечения сообщила, что кэш политик недействителен.
0xC004F029 Служба лицензирования программного обеспечения не может быть запущена в текущем режиме ОС
0xC004F030 Служба лицензирования программного обеспечения определила, что невозможно сохранить идентификатор установки (IID) или идентификатор подтверждения (CID).

19] Код ошибки (0xC004F031 — 0x4004F040)

Код ошибки Описание
0xC004F031 Идентификатор установки (IID) и идентификатор подтверждения (CID) не совпадают. Подтвердите IID и при необходимости повторно получите новый CID.
0xC004F032 Служба лицензирования программного обеспечения определила, что данные привязки недействительны.
0xC004F033 Служба лицензирования программного обеспечения сообщила, что ключ продукта не может быть установлен. Подробности смотрите в журнале событий.
0xC004F034 Служба лицензирования программного обеспечения сообщила, что лицензия не найдена или недействительна.
0xC004F035 Служба лицензирования программного обеспечения сообщила, что компьютер не удалось активировать с помощью ключа продукта с корпоративной лицензией. Для систем с корпоративной лицензией требуется обновление соответствующей операционной системы. Обратитесь к системному администратору или используйте другой тип ключа.
0xC004F038 Служба лицензирования программного обеспечения сообщила, что компьютер не может быть активирован. Счетчик, сообщаемый вашей службой управления ключами (KMS), недостаточен.
0xC004F039 Служба лицензирования программного обеспечения сообщила, что компьютер не может быть активирован. Служба управления ключами (KMS) не включена
0x4004F040 Служба лицензирования программного обеспечения сообщила, что компьютер был активирован, но владелец должен проверить права на использование продукта.

20] Код ошибки (0xC004F041 — 0xC004F060)

Код ошибки Описание
0xC004F041 Служба лицензирования программного обеспечения определила, что служба управления ключами (KMS) не активирована. КМС нужно активировать
0xC004F042 Служба лицензирования программного обеспечения определила, что указанную службу управления ключами (KMS) нельзя использовать.
0xC004F047 Служба лицензирования программного обеспечения сообщила, что политика прокси-сервера не обновлена.
0xC004F050 Служба лицензирования программного обеспечения сообщила, что ключ продукта недействителен.
0xC004F051 Служба лицензирования программного обеспечения сообщила, что ключ продукта заблокирован
0xC004F052 Служба лицензирования программного обеспечения сообщила, что лицензии содержат повторяющиеся свойства.
0xC004F053 Служба лицензирования программного обеспечения определила, что лицензия недействительна. Лицензия содержит политику переопределения, которая настроена неправильно.
0xC004F054 Служба лицензирования программного обеспечения сообщила, что информация об управлении лицензиями дублирует данные.
0xC004F055 Служба лицензирования программного обеспечения сообщила, что базовый SKU недоступен.
0xC004F056 Служба лицензирования программного обеспечения сообщила, что компьютер не удалось активировать с помощью службы управления ключами (KMS).
0xC004F057 Служба лицензирования программного обеспечения сообщила, что в BIOS компьютера отсутствует необходимая лицензия.
0xC004F058 Служба лицензирования программного обеспечения сообщила, что в BIOS компьютера отсутствует необходимая лицензия.
0xC004F059 Служба лицензирования программного обеспечения сообщила, что лицензия в BIOS компьютера недействительна.
0xC004F060 Служба лицензирования программного обеспечения определила, что версия лицензионного пакета недействительна.

21] Код ошибки (0xC004F061 — 0xC004F069)

Код ошибки Описание
0xC004F061 Служба лицензирования программного обеспечения определила, что указанный ключ продукта можно использовать только для обновления, а не для чистой установки.
0xC004F062 Служба лицензирования программного обеспечения сообщила, что не удалось найти требуемую лицензию.
0xC004F063 Служба лицензирования программного обеспечения сообщила, что в BIOS компьютера отсутствует необходимая лицензия.
0xC004F064 Служба лицензирования программного обеспечения сообщила, что срок действия неоригинального льготного периода истек.
0x4004F065 Служба лицензирования программного обеспечения сообщила, что приложение работает в течение действительного льготного периода для неоригинального программного обеспечения.
0xC004F066 Служба лицензирования программного обеспечения сообщила, что свойство подлинной информации не может быть установлено до того, как будет установлено зависимое свойство.
0xC004F067 Служба лицензирования программного обеспечения сообщила, что истек льготный период для неоригинальной версии (тип 2).
0x4004F068 Служба лицензирования программного обеспечения сообщила, что приложение работает в течение допустимого льготного периода для неоригинального программного обеспечения (тип 2).
0xC004F069 Служба лицензирования программного обеспечения сообщила, что артикул продукта не найден.

22] Код ошибки (0xC004F071 — 0xC004F079)

Код ошибки Описание
0xC004F071 Служба лицензирования программного обеспечения сообщила, что файл манифеста подключаемого модуля неверен.
0xC004F072 Служба лицензирования программного обеспечения сообщила, что не удалось найти политики лицензирования для быстрого запроса.
0xC004F073 Служба лицензирования программного обеспечения сообщила, что политики лицензирования для быстрого запроса не загружены.
0xC004F074 Служба лицензирования программного обеспечения сообщила, что компьютер не может быть активирован. Не удалось связаться со службой управления ключами (KMS). Дополнительные сведения см. в журнале событий приложений.
0xC004F075 Служба лицензирования программного обеспечения сообщила, что операция не может быть завершена, так как служба останавливается.
0xC004F076 Служба лицензирования программного обеспечения сообщила, что запрошенный подключаемый модуль не может быть найден.
0xC004F077 Служба лицензирования программного обеспечения определила несовместимую версию данных аутентификации
0xC004F078 Служба лицензирования программного обеспечения сообщила, что ключ не соответствует
0xC004F079 Служба лицензирования программного обеспечения сообщила, что данные аутентификации не установлены

23] Код ошибки (0xC004F02A — 0xC004F07C)

Код ошибки Описание
0xC004F02A Служба лицензирования программного обеспечения сообщила, что лицензия недействительна.
0xC004F02C Служба лицензирования программного обеспечения сообщила, что формат данных для автономной активации неверен.
0xC004F02D Служба лицензирования программного обеспечения определила, что версия автономного идентификатора подтверждения (CID) неверна.
0xC004F02E Служба лицензирования программного обеспечения определила, что версия автономного идентификатора подтверждения (CID) не поддерживается.
0xC004F02F Служба лицензирования программного обеспечения сообщила, что длина автономного идентификатора подтверждения (CID) неверна.
0xC004F04D Служба лицензирования программного обеспечения определила, что идентификатор установки (IID) или идентификатор подтверждения (CID) недействителен.
0xC004F04F Служба лицензирования программного обеспечения сообщила, что в файлах лицензий не найдена информация об управлении лицензиями.
0xC004F06A Служба лицензирования программного обеспечения сообщила, что запрошенная операция не разрешена
0xC004F06B Служба лицензирования программного обеспечения определила, что она работает на виртуальной машине. Служба управления ключами (KMS) не поддерживается в этом режиме.
0xC004F06C Служба лицензирования программного обеспечения сообщила, что компьютер не может быть активирован. Служба управления ключами (KMS) определила, что отметка времени запроса недействительна.
0xC004F07A Служба лицензирования программного обеспечения сообщила, что проверка не может быть выполнена
0xC004F07B Запрошенная операция недоступна, пока работает служба лицензирования программного обеспечения.
0xC004F07C Служба лицензирования программного обеспечения определила, что версия BIOS компьютера недействительна.

24] Код ошибки (0xC004F200 — 0xC004F309)

Код ошибки Описание
0xC004F200 Служба лицензирования программного обеспечения сообщила, что текущее состояние не соответствует действительности.
0xC004F301 Служба лицензирования программного обеспечения сообщила, что компьютер не может быть активирован. Срок действия запроса на активацию на основе токенов истек
0xC004F302 Служба лицензирования программного обеспечения сообщила, что автоматическая активация не удалась. Служба лицензирования программного обеспечения сообщила, что в системе не найдены сертификаты, которые могли бы активировать продукт без взаимодействия с пользователем.
0xC004F303 Служба лицензирования программного обеспечения сообщила, что цепочка сертификатов не может быть построена или не прошла проверку.
0xC004F304 Служба лицензирования программного обеспечения сообщила, что не удалось найти требуемую лицензию.
0xC004F305 Служба лицензирования программного обеспечения сообщила, что в системе не найдены сертификаты, которые могли бы активировать продукт.
0xC004F306 Служба лицензирования программного обеспечения сообщила, что эта версия программного обеспечения не поддерживает активацию на основе токенов.
0xC004F307 Служба лицензирования программного обеспечения сообщила, что компьютер не может быть активирован. Данные активации недействительны
0xC004F308 Служба лицензирования программного обеспечения сообщила, что компьютер не может быть активирован. Данные активации изменены
0xC004F309 Служба лицензирования программного обеспечения сообщила, что компьютер не может быть активирован. Запрос активации и ответ не совпадают

25] Код ошибки (0xC004F30A — 0xC004F30F)

Код ошибки Описание
0xC004F30A Служба лицензирования программного обеспечения сообщила, что компьютер не может быть активирован. Сертификат не соответствует условиям лицензии
0xC004F30B Служба лицензирования программного обеспечения сообщила, что вставленная смарт-карта не может быть использована для активации продукта.
0xC004F30C Служба лицензирования программного обеспечения сообщила, что содержимое лицензии на активацию на основе токенов недействительно.
0xC004F30D Служба лицензирования программного обеспечения сообщила, что компьютер не может быть активирован. Недействительный отпечаток пальца
0xC004F30E Служба лицензирования программного обеспечения сообщила, что компьютер не может быть активирован. Отпечаток не соответствует ни одному сертификату
0xC004F30F Служба лицензирования программного обеспечения сообщила, что компьютер не может быть активирован. Сертификат не соответствует критериям, указанным в лицензии на выдачу

26] Код ошибки (0xC004F310 — 0xC004F313)

Код ошибки Описание
0xC004F310 Служба лицензирования программного обеспечения сообщила, что компьютер не может быть активирован. Сертификат не соответствует идентификатору точки доверия (TPID), указанному в лицензии на выдачу.
0xC004F311 Служба лицензирования программного обеспечения сообщила, что компьютер не может быть активирован. Программный токен нельзя использовать для активации
0xC004F312 Служба лицензирования программного обеспечения сообщила, что компьютер не может быть активирован. Сертификат нельзя использовать, так как его закрытый ключ можно экспортировать.
0xC004F313 Служба лицензирования программного обеспечения сообщила, что не удалось загрузить библиотеку шифрования CNG. Текущий сертификат может быть недоступен в этой версии Windows.

27] Код ошибки (0xC004F310 — 0xC004F313)

Код ошибки Описание
0xC004FC03 При активации вашей копии Windows возникла сетевая проблема.
0x4004FC04 Служба лицензирования программного обеспечения сообщила, что приложение работает в течение периода действия, основанного на времени.
0x4004FC05 Служба лицензирования программного обеспечения сообщила, что у приложения есть бессрочный льготный период.
0x4004FC06 Служба лицензирования программного обеспечения сообщила, что приложение работает в течение действительного продленного льготного периода.
0xC004FC07 Служба лицензирования программного обеспечения сообщила, что срок действия истек

28] Код ошибки (0xC004D101 — 0xC004D109)

Код ошибки Описание
0xC004D101 Процессор безопасности сообщил об ошибке инициализации
0x8004D102 Процессор безопасности сообщил, что машинное время не соответствует доверенному времени.
0xC004D103 Процессор безопасности сообщил, что произошла ошибка
0xC004D104 Процессор безопасности сообщил, что были использованы недопустимые данные
0xC004D105 Процессор безопасности сообщил, что значение уже существует
0xC004D107 Процессор безопасности сообщил, что был использован недостаточный буфер
0xC004D108 Процессор безопасности сообщил, что были использованы недопустимые данные
0xC004D109 Процессор безопасности сообщил, что был сделан недопустимый вызов

29] Код ошибки (0xC004D301 — 0xC004D309)

Код ошибки Описание
0xC004D301 Процессор безопасности сообщил, что доверенное хранилище данных было взломано.
0xC004D302 Процессор безопасности сообщил, что доверенное хранилище данных было повторно активировано.
0xC004D303 Процессор безопасности сообщил, что доверенное хранилище было воссоздано
0xC004D304 Процессор безопасности сообщил, что ключ входа не найден в доверенном хранилище данных.
0xC004D305 Процессор безопасности сообщил, что ключ входа уже существует в доверенном хранилище данных.
0xC004D306 Процессор безопасности сообщил, что ключ входа слишком велик для размещения в доверенном хранилище данных.
0xC004D307 Процессор безопасности сообщил, что превышено максимально допустимое количество повторных включений. Вы должны переустановить ОС перед повторной попыткой перезарядки.
0xC004D308 Процессор безопасности сообщил, что размер входных данных слишком велик для размещения в доверенном хранилище данных.
0xC004D309 Процессор безопасности сообщил, что машина вышла за допустимые пределы аппаратного обеспечения.

30] Код ошибки (0xC004D10A — 0xC004D30E)

Код ошибки Описание
0xC004D10A Процессор безопасности сообщил об ошибке несоответствия версии
0x8004D10B Процессор безопасности не может работать, пока подключен отладчик
0xC004D30A Процессор безопасности сообщил, что безопасный таймер уже существует.
0xC004D30B Процессор безопасности сообщил, что безопасный таймер не найден
0xC004D30C Процессор безопасности сообщил, что время таймера безопасности истекло.
0xC004D30D Процессор безопасности сообщил, что имя безопасного таймера слишком длинное.
0xC004D30E Процессор безопасности сообщил, что доверенное хранилище данных заполнено

31] Код ошибки (0xC004D10A — 0xC004D30E)

Код ошибки Описание
0xC004D401 Процессор безопасности сообщил об ошибке несоответствия системных файлов
0xC004D402 Процессор безопасности сообщил об ошибке несоответствия системных файлов
0xC004D501 Процессор безопасности сообщил об ошибке с данными ядра
0xC004D502 Кэш режима ядра взломан, и попытка восстановления не удалась
0x4004D601 Кэш режима ядра не изменился
0x4004D602 Политики, требующие перезагрузки, изменились
0xC004D701 Для указанной функции уже установлен внешний ключ дешифрования.
0xC004D702 Произошла ошибка во время выполнения прокси

32] Код ошибки (0x803FA065 — 0x803FA080)

Код ошибки Описание
0x803FA065 Сервер активации определил, что указанный ключ продукта недействителен.
0x803FA066 Сервер активации определил наличие проблемы с указанным ключом продукта.
0x803FA067 Сервер активации определил, что указанный ключ продукта заблокирован.
0x803FA068 Сервер активации определил, что указанный ключ продукта недействителен.
0x803FA071 Сервер активации сообщил, что ключ продукта превысил лимит разблокировки.
0x803FA073 Сервер активации определил, что лицензия недействительна (INVALID_PRODUCT_DATA_ID).
0x803FA074 Сервер активации определил, что лицензия недействительна (INVALID_PRODUCT_DATA).
0x803FA076 Сервер активации определил, что ключ продукта недействителен (INVALID_ACTCONFIG_ID).
0x803FA077 Сервер активации определил, что указанный ключ продукта недействителен (INVALID_PRODUCT_KEY_LENGTH).
0x803FA078 Сервер активации определил, что указанный ключ продукта недействителен (INVALID_PRODUCT_KEY_FORMAT).
0x803FA080 Сервер активации сообщил, что превышено ограничение на расширение ключа многократной активации.

33] Код ошибки (0x803FA06C — 0x803FA09A)

Код ошибки Описание
0x803FA06C Сервер активации определил, что указанный ключ продукта не поддерживается.
0x803FA07A Сервер активации определил, что указанный ключ продукта недействителен (INVALID_ARGUMENT).
0x803FA07D На сервере активации произошла ошибка (INVALID_BINDING_URI).
0x803FA07F Сервер активации сообщил, что ключ многократной активации превысил свой лимит
0x803FA08D Сервер активации определил, что версия автономного идентификатора подтверждения (CID) неверна.
0x803FA08E Сервер активации сообщил, что формат данных автономной активации неверен.
0x803FA08F Сервер активации сообщил, что длина автономного идентификатора подтверждения (CID) неверна.
0x803FA09A Сервер активации сообщил, что ключ продукта на основе времени не настроен для активации.

34] Код ошибки (0x803FA083 — 0x803FA099)

Код ошибки Описание
0x803FA083 Сервер активации сообщил, что указанный ключ продукта нельзя использовать для онлайн-активации.
0x803FA090 Служба лицензирования программного обеспечения определила, что идентификатор установки (IID) или идентификатор подтверждения (CID) недействителен.
0x803FA097 Сервер активации сообщил, что активация на основе времени предпринята до даты начала.
0x803FA098 Сервер активации сообщил, что после даты окончания была предпринята попытка активации на основе времени.
0x803FA099 Сервер активации сообщил, что новая повременная активация недоступна

35] Код ошибки (0x803FA0C8 — 0x803FA0D6)

Код ошибки Описание
0x803FA0C8 Сервер активации сообщил, что нет доступных бизнес-правил для активации указанного ключа продукта.
0x803FA0D3 Сервер активации определил, что лицензия недействительна (INVALID_BINDING).
0x803FA0D4 Сервер активации определил наличие проблемы с указанным ключом продукта (BINDING_NOT_CONFIGURED).
0x803FA0D5 Сервер активации определил, что достигнут предел переопределения. (РОТ)
0x803FA0D6 Сервер активации определил, что достигнут предел переопределения

36] Код ошибки (0x803FABBA — 0x803FABBF)

Код ошибки Описание
0x803FАBBА Пользователь не имеет права на повторную активацию из-за отсутствия ассоциации
0x803FABBB Пользователь не имеет права на повторную активацию, поскольку он не является администратором на устройстве
0x803FABBC Пользователь не имеет права на повторную активацию, так как он регулируется
0x803FABBD Пользователь не имеет права на повторную активацию, поскольку лицензия ограничена
0x803FABBE Устройство не подходит для повторной активации, так как оно ограничено.
0x803FABBF Пользователь не соответствует требованиям, так как это запрещено политикой.

37] Error Code (0x803FABB8 – 0x803FABC3)

Код ошибки Описание
0x803FABB8 HardwareId донора не владеет правами на операционную систему
0x803FABB9 Пользователь не имеет права на повторную активацию. 
(общий код ошибки)
0x803FABC0 Устройство нельзя повторно активировать, так как оно заблокировано.
0x803FABC1 Пользователь не имеет права на повторную активацию, так как он заблокирован
0x803FABC2 Лицензия не подлежит переносу, так как лицензия заблокирована
0x803FABC3 Устройство не может быть передано, так как оно заблокировано.

38] Error Code (0xC004FE00 – 0x803FA400)

Код ошибки Описание
0xC004FE00 Служба лицензирования программного обеспечения сообщила, что для восстановления после подделки доверенного хранилища службы SL требуется активация.
0x803FA0CB Сервер активации определил, что указанный ключ продукта заблокирован для этого географического местоположения.
0x803FA400 Сервер активации определил, что предложение больше не существует

Во время активации системы, которая была установлена или обновлялась до Windows 10, могут возникать типичные ошибки. Причины сбоя активатора носят разный характер, но способ решения по их устранению достаточно прост. Главное – нужно знать, что обозначают выданные системой ошибки активации в Windows 10, чтобы иметь возможность их правильно устранить.

Ошибки активации в Windows 10

Каждая ошибка имеет свой уникальный одноименный код, который высвечивается вместе с сообщением в окне при прерванном процессе активации. Расшифровав его можно самостоятельно убрать возникшую ошибку, и продолжить прерванную активизацию системы. Ниже мы рассмотрим список ошибок по кодам и предложим методы их устранения.

0хc004f074 — ошибка активации Windows 10

Ошибка по коду 0хc004f074 достаточно специфическая и возникает при обновлении ОС, во время запуска и работы системы или программного обеспечения, а также в момент активации Windows 10. Данный сбой может появляться не только на продуктах Microsoft тестового периода, но и на активированных тоже.

Причины ошибки кроются в:

  • разноверсионном поддержании KMS-клиента и Хост-компьютера;
  • в отличии системного времени при изменении часового пояса на Хост-устройстве и KMS-клиенте.

При попытке исправления этого сбоя рекомендуется проверять по очереди каждую причину, ведь они могут быть взаимосвязаны.

Для исправления 0хc004f074 требуется:

Проверить время и правильность часового пояса и при несоответствии с фактическим провести синхронизацию. Для этого нужно:

  1. войти во «Все параметры» и далее «Время и Язык». При настройке выставляется часовой пояс, после чего нужно отключить и включить опцию «Устанавливать время автоматически».

    Установка даты, времени и часового пояса

  2. «Все параметры» — «Система» — «О системе».
  3. Состояние ключа (Win+R – ввод vbs – dlv).
  4. Если лицензионный ключ не указан, то его нужно ввести заново посредством поочередного ввода команд Slui 3 и Slui 4.
  5. Нужно провести сканирование и восстановление системы — ввод команды sfc /scannow в командной строке от имени Администратора.
  6. При истечении срока пробной версии Windows 10 лицензионный ключ набирается в формате vbs — ipk yyyyy-yyyyy-yyyyy-yyyyy-yyyyy через командную строку (Администратор). После чего производится активация системы в режиме онлайн.

Если ошибку устранить не удалось, то можно обратится за помощью в службу поддержки Microsoft.

  1. Во-первых, в неактивированной «десятке» для пользователя заблокированы все возможности персонализации системы. Обладатель нелицензионной Windows 10 не может: сменить фон рабочего стола, поменять используемые для оформления системы цвета, применить звуковые темы, настроить экран блокировки, панель задач или меню Пуск. Хорошие новости состоят в том, что отключённая персонализация — это единственное ограничение функциональности в неактивированной «десятке». Остальные минусы, скорее, психологического характера.
  2. Во-вторых, в инструменте «Параметры» появляется и постоянно «мозолит глаза» надпись о необходимости активировать Windows 10.

  1. В-третьих, спустя три часа после каждой перезагрузки компьютера на экране в нижнем правом углу появляется надпись «Активация Windows. Чтобы активировать Windows, перейдите в раздел «Параметры»».

Последняя ограничительная мера для нелицензионной ОС кажется нам самой неудобной: водяной знак всегда находится поверх любого контента, а оформлен он таким цветом, что виден как на светлом, так и на тёмном фоне. Мы не один день пытались найти действительно работающий способ убрать этот водяной знак, с этой целью нами были изучены сотни сайтов со всего мира. Мы испытывали всевозможные программы по запросу «remove watermark activation windows 10», меняли многочисленные параметры реестра, отключали разные службы, но ничего в итоге не помогло. В результате, мы пришли к выводу, что на данный момент нет ни одного способа убрать эту надпись о необходимости активации Windows насовсем. При этом тысячи сайтов в интернете утверждают, что они знают, как решить этот вопрос. Не верьте им! Ничего они не знают.

Есть только такие способы удалить водяной знак «Активация Windows»:

  • Каждые три часа самостоятельно перезагружать компьютер.
  • Активировать каким-то образом свою Windows 10.
  • Стать участником программы Windows Insider и установить техническую версию ОС.

Если вдруг вы знаете, как можно действительно насовсем удалить водяной знак «Активация Windows», пожалуйста, сообщите в комментариях ниже.

Добавим немного информации о некоторых возможностях персонализации неактивированной Windows 10. В Параметрах заменить обои на рабочем столе на свою картинку не получится, но это можно сделать по-другому. Для этого в папке с изображением надо кликнуть по нему правой клавишей мыши и выбрать пункт «Сделать фоновым изображением рабочего стола».

Для справки, стоимость лицензионного ключа для Windows 10 Home в онлайн магазине Microsoft составляет на момент публикации этого материала 8699 рублей, цена версии Pro — 15990 рублей. Приобрести активацию для продукта Microsoft иногда можно и дешевле, у официальных дилеров. Однако делать это стоит очень обдуманно, внимательно изучив репутацию компании-продавца. Учитывайте, что даже за 4-5 тысяч рублей официальная Windows 10 реализовываться просто не может, не говоря уже о более дешёвых вариантах.

0х80072f8f — ошибка активации Windows 10

Эта ошибка возникает из-за разных факторов. Основные причины данного сбоя в ОС Windows:

  • неполная установка или поврежденная загрузка ПО;
  • повреждение файла или программных файлов Windows вирусом (вредоносным ПО);
  • целенаправленное злонамеренное или случайное удаление файлов по обновлению Windows другой программой;
  • повреждение реестра обновления вследствие установки или удаления ПО.

Исправление ошибки:

  1. Восстановление записей реестра. Рекомендуется перед выполнением данного процесса создать резервную копию, сделав экспорт части реестра.
  2. Полное сканирование ПК на наличие вредоносного ПО.
  3. Обновление драйверов устройств на компьютере.
  4. С помощью cleanmgr нужно очистить систему от временных папок и файлов.

Очистка системы от временных файлов и папок

Ошибка 0х8007007b при активации Windows 10

Синтаксическая ошибка с кодом 0x8007007b в метке тома, имени файла или папки появляется из-за неправильной настройки сетевых параметров, попытки активации при отключенном интернете, а также при вводе ключа для несоответствующего ему продукта Майкрософт.

Как устранить сбой:

  1. Нужно удостоверится, что активация системы не произошла – «Пуск» (правая кнопка мыши) — «Командная строка (Администратор)», где прописываем slmgr – dlv (исполняемая команда Windows Script Host).
  2. Проверка «Состояние лицензии». При ее отсутствии — Win+R с вводом slui 3.

    Ввод команды slui 3

  3. Ввод лицензионного ключа для соответствующей версии Windows.
  4. Если активация не произошла, хотя «ключ установлен успешно», нужно в командной строке от имени Администратора прописать команду vbs /ipk YYYYY-YYYYY-YYYYY-YYYYY-YYYYY и дождаться успешного окончания процесса.

Как активировать Window 10 без ключа.

Если вы долгое время использовали продукты Microsoft, особенно их операционную систему, которая называется WINDOWS, вы должны знать о её развитии, к которому она пришла в последнее время. Что касается операционных систем, с которыми мы имеем дело, Windows 10 является последней из представленных Microsoft на рынке. Теперь, когда вы покупаете или загружаете операционную систему, которая в данном случае Windows 10, она всегда поставляется с ключом продукта. Ключ продукта – это лицензия, которая даёт вам право активировать ОС Windows после её установки. Часто пользователи предпочитают загружать ОС напрямую из Интернета, фактически не покупая ОС, или даже если они это делают, они, к сожалению, теряют ключ продукта. В таких случаях вам нужен альтернативный или какой-то конкретный приём, чтобы активировать вашу ОС как можно скорее; в противном случае, она перестанет функционировать через несколько недель. Вы также будете получать постоянное уведомление на панели задач, чтобы Вы немедленно активировали свою Windows 10.

Если вы ищете руководство по активации Windows 10 без ключа продукта. Поздравляем! Вы попали в идеальное место, где вам будет предоставлено пошаговое руководство по установке Windows 10. Итак, давайте начнем с первого шага.

  1. Откройте эту ссылку в вашем браузере – Code-windows10.txt. Вы увидите текст, который появится на вашем экране. Теперь вам нужно скопировать этот текст. (Скопируйте этот код).
  2. Создайте текстовый файл и вставьте код. Перейдите на рабочий стол и создайте новый текстовый документ, нажав правую кнопку мыши и откройте блокнот. Вставьте текст, который вы скопировали в новый текстовый документ. Это были очень простые шаги, и я ожидаю, что вы будете следовать за мной.

  • @echo off title Activate Windows 10 ALL versions for FREE!&cls&echo ============================================================================&echo #Project: Activating Microsoft software products for FREE without software&echo ============================================================================&echo.&echo #Supported products:&echo – Windows 10 Home&echo – Windows 10 Home N&echo – Windows 10 Home Single Language&echo – Windows 10 Home Country Specific&echo – Windows 10 Professional&echo – Windows 10 Professional N&echo – Windows 10 Education N&echo – Windows 10 Education N&echo – Windows 10 Enterprise&echo – Windows 10 Enterprise N&echo – Windows 10 Enterprise LTSB&echo – Windows 10 Enterprise LTSB N&echo.&echo.&echo ============================================================================&echo Activating your Windows…&cscript //nologo slmgr.vbs /upk >nul&cscript //nologo slmgr.vbs /cpky >nul&wmic os | findstr /I “enterprise” >nul if %errorlevel% EQU 0 (cscript //nologo slmgr.vbs /ipk NPPR9-FWDCX-D2C8J-H872K-2YT43 >nul&cscript //nologo slmgr.vbs /ipk DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4 >nul&cscript //nologo slmgr.vbs /ipk WNMTR-4C88C-JK8YV-HQ7T2-76DF9 >nul&cscript //nologo slmgr.vbs /ipk 2F77B-TNFGY-69QQF-B8YKP-D69TJ >nul&cscript //nologo slmgr.vbs /ipk DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ >nul&cscript //nologo slmgr.vbs /ipk QFFDN-GRT3P-VKWWX-X7T3R-8B639 >nul) else wmic os | findstr /I “10 pro” >nul if %errorlevel% EQU 0 (cscript //nologo slmgr.vbs /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX >nul&cscript //nologo slmgr.vbs /ipk MH37W-N47XK-V7XM9-C7227-GCQG9 >nul) else wmic os | findstr /I “home” >nul if %errorlevel% EQU 0 (cscript //nologo slmgr.vbs /ipk TX9XD-98N7V-6WMQ6-BX7FG-H8Q99 >nul&cscript //nologo slmgr.vbs /ipk 3KHY7-WNT83-DGQKR-F7HPR-844BM >nul&cscript //nologo slmgr.vbs /ipk 7HNRX-D7KGG-3K4RQ-4WPJ4-YTDFH >nul&cscript //nologo slmgr.vbs /ipk PVMJN-6DFY6-9CCP6-7BKTT-D3WVR >nul) else (echo.) set i=1 :server if %i%==1 set KMS_Sev=kms7.MSGuides.com if %i%==2 set KMS_Sev=kms8.MSGuides.com if %i%==3 set KMS_Sev=kms9.MSGuides.com if %i%==4 goto notsupported cscript //nologo slmgr.vbs /skms %KMS_Sev% >nul&echo ============================================================================&echo.&echo. cscript //nologo slmgr.vbs /ato | find /i “successfully” && (echo.&echo ============================================================================&echo.&echo #My official blog: MSGuides.com&echo.&echo #How it works: bit.ly/kms-server&echo.&echo #Please feel free to contact me at if you have any questions or concerns.&echo.&echo #Please consider supporting this project: donate.msguides.com&echo #Your support is helping me keep my servers running everyday!&echo.&echo ============================================================================&choice /n /c YN /m “Would you like to visit my blog [Y,N]?” & if errorlevel 2 exit) || (echo The connection to my KMS server failed! Trying to connect to another one… & echo Please wait… & echo. & echo. & set /a i+=1 & goto server) explorer “https://MSGuides.com”&goto halt :notsupported echo ============================================================================&echo.&echo Sorry! Your version is not supported.&echo. :halt pause3. Сохранить как текстовый файл «1click.cmd». Теперь, нажмите на значок файла в вашем новом текстовом документе и выберите опцию «Сохранить как». Перед вами появится окно. Напишите имя файла как «1click.cmd» и сохраните его на рабочем столе или в любом другом месте, где вы можете легко получить доступ к файлу.
  • 4. Запустите этот файл CMD с правами администратора. Теперь вам нужно щёлкнуть правой кнопкой мыши на файле, который вы только что сохранили, и выберите опцию «Запуск от имени администратора».
  • 5 способов активации Windows 10 без ключей продукта

    Microsoft анонсировала «последнюю версию Windows», то есть Windows 10, и пояснила, что новая версия будет ориентирована на разработку мощных и новых функций по обновлению программного обеспечения, а не на создание новой версии. Мы получили известие от Microsoft о том, что подтверждено, что Windows 10 абсолютно бесплатная для обновления для всех клиентов, использующих подлинную копию Windows 7 или выше.

    Если вы ищете ответ: Как я могу активировать Windows 10 бесплатно? Как вы уже знаете, nfr rfr обновление до Windows уже бесплатно. Так что вам нужна только действительная копия Windows, которую вы купили или ранее обновили. В течение многих лет Microsoft знала, что пытается контролировать пиратство своих продуктов. Некоторые люди могут сказать вам, что Microsoft хочет, чтобы люди специально крали их продукты.

    Поэтому сегодня мы обсудим, как мы можем активировать Windows 10 без ключа продукта бесплатно:

    1 – Использование файла ISO вместо обновления до Windows 10: вы можете получить последнюю версию Windows 10 Professional, используя файлы ISO. Если вы когда-либо устанавливали какие-либо версии Windows ранее, я уверен, что у вас не возникнет проблем при обновлении до Windows 10.

    2 – Секретный способ активации Windows 10: изначально; когда вы устанавливаете Windows 7 и она активируется, вам не нужно активировать Windows 10. Хитрость заключается в том, чтобы обновить Windows 7 или Windows 8, чтобы получить Windows 10.

    3- Ещё один способ обновления до Windows10: если вы активировали Windows 7 или Windows 8 и ваша Windows 10 полностью активирована, вам не нужно покупать Windows 10.

    Вы не поверили мне, но этот трюк для «Как активировать Windows 10 без ключа продукта» работает лучше всего.

    4- Уникальный метод:

    Ну, лично я считаю, что это действительно простой способ обновления до Windows 10.

    Шаг 1. Сначала вам нужно зайти в настройки в Windows 10 или зайти в Cortana и набрать настройки. Шаг 2. Откройте настройки, затем нажмите «Обновление и безопасность». Шаг 3: В правой части окна нажмите Активация. Шаг 4: Нажмите «Перейти в магазин» и купить в магазине Windows 10.

    5 – Активировать с помощью загрузчика Windows: если у вас установлена ​​Windows 7 Ultimate и вы не можете активировать её с помощью Ms-Toolkit или чего-либо ещё, вы можете попробовать активировать Windows 7 Ultimate с помощью Windows Loader, для этого вам просто нужно загрузить и запустить Windows Loader Software и просто разрешить ему активировать Windows, это работает так же, как Ms Toolkit.

    6 – Активировать с помощью Microsoft Toolkit: я действительно рекомендую использовать этот метод до тех пор, пока у вас нет ПК с Windows 7, да, потому что с помощью программного обеспечения Microsoft Toolkit можно активировать и установить ключ продукта любой версии Windows, кроме Windows 7 Ultimate, кроме того, вы также можете активировать или установить ключ продукта любой версии Microsoft Office.

    ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: ЭТО РУКОВОДСТВО О “КАК АКТИВИРОВАТЬ WINDOWS 10 БЕЗ КЛЮЧА ПРОДУКТА” ТОЛЬКО ДЛЯ ТЕХ, КТО ПОТЕРЯЛ СВОЙ КЛЮЧ ПРОДУКТА/УДАЛИЛ ПОДЛИННУЮ ВЕРСИЮ, А НЕ ДЛЯ ИСПОЛЬЗОВАНИЯ КЕМ-ЛИБО, КТО УЖЕ ИМЕЕТ ПОДЛИННУЮ УСТАНОВЛЕННУЮ WINDOWS. НИ НАШ САЙТ, НИ ЕГО ПАРТНЁРЫ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ФИЗИЧЕСКИЕ/ФИНАНСОВЫЕ ПОТЕРИ, ЮРИДИЧЕСКИЕ ДЕЙСТВИЯ ИЛИ НАРУШЕНИЕ АВТОРСКИХ ПРАВ, С КОТОРЫМИ ВЫ МОЖЕТЕ СТОЛКНУТЬСЯ ПРИ ИСПОЛЬЗОВАНИИ ЭТОГО ИНСТРУМЕНТА.

    Ошибка 0х803f7001 при активации Windows 10

    Если ОС не нашла после обновления до Windows 10 активную лицензию, то появляется в окне сообщение с ошибкой 0х803f7001.

    Причины:

    • произошел сбой при передаче информации о лицензионной копии на удаленный сервер с возвратом к источнику;
    • ввод неправильных значений в строку активации;
    • попытка активации Windows 10 ключом от 7 или 8 версии;
    • изменение конфигурации ПК вследствие замены жесткого диска или материнской платы.

    Для устранения данной ошибки требуется проверить состояние лицензии:

    1. «Пуск» — в Командной строке от имени Администратора ввести команду slmgr – dlv.
    2. Активизация системы вручную, если высветилось «Состояние лицензии: не активировано». Для этого необходимо нажать «Пуск», далее – «Параметры» — «Обновление и безопасность» и завершить «Активация». В строку «Изменить ключ продукта» ввести лицензионный ключ, используемый в версии Windows до обновления.

      Ввод лицензионного ключа

    3. При неимении ключа допускается продление на месяц пробного периода Windows посредством ввода slmgr – rearm в командную строку.

    Чтобы данная ошибка больше не появлялась, а изменения вступили в силу, требуется провести перезагрузку компьютера.

    Ознакомительная Windows 10 Enterprise

    У Microsoft есть специальный ресурс для IT-специалистов и разработчиков Evaluation Center , где эта особая каста пользователей может получить различные продукты компании бесплатно. И легально использовать их какое-то время в ознакомительных целях. В числе таких продуктов — ознакомительные редакции Windows Enterprise и LTSB (та же Enterprise, только с минимальным объёмом поставки системных обновлений) . Эти редакции поставляются уже активированными ключом Evaluation -лицензии сроком на 90 дней.

    В юридическом смысле это, по сути, тот же триал-формат, что и в случае с Win7. Такая же ознакомительная редакция с 90-дневной Evaluation -лицензией существует и для Windows 8.1 Enterprise. Только её уже нельзя скачать на сайте Evaluation Center, разве что где-нибудь на сторонних ресурсах отыщется дистрибутив.

    Ровно 90 дней можно использовать корпоративную Win10 с бесплатной ознакомительной Evaluation -лицензией. По истечении этого срока нужно либо осуществить активацию платным ключом, либо, согласно требованиям Microsoft, честно и добросовестно отказаться от использования системы. Ну или провести кое-какие манипуляции, чтобы продлить триал-срок до 360 дней. Что делать потом? Раз в году уже как бы и можно переустановить Windows. Если же не активировать ознакомительную Win10, она будет через определённые промежутки времени перезагружаться.

    Что же за манипуляции такие, которые продлевают официальные триал-сроки использования системы?

    Как продлить триал-срок использования Windows

    Win7 и ознакомительную Win10 Enterprise/LTSB – системы, поставляемые с юридически зафиксированным триал-сроком – как упоминалось, можно использовать дольше их, соответственно, 30- и 90-дневного периода. Для этого необходимо в конце срока сбросить активацию, чтобы отсчёт триал-срока начался заново. Сделать сброс активации Windows можно не более 3-х раз, следовательно, получим максимальный триал-срок 120 дней для Win7 и 360 дней – для ознакомительной Win10.

    Есть два способа, как можно сбросить активацию. Первый – с помощью командной строки. Запускаем её от имени администратора, вставляем:

    slmgr -rearm

    В идеале должно появиться уведомление об успешном выполнении операции. После чего компьютер перезагружаем и в свойствах системы, смотрим, обновилась ли активация.

    Второй способ – использование штатного средства подготовки системы к развёртыванию на корпоративных устройствах Sysprep . Вводим это название в поле команды «Выполнить», в открывшемся проводнике запускаем средство, выставляем в нём настройки, как показано на скриншоте, и жмём «Ок».

    После этого компьютер перезагрузится. С новым его запуском увидим этап выбора региональных параметров и создания новой учётной записи, как при установке Windows. Здесь нужно просто создать новую учётку, её потом можно удалить. Старая наша учётка будет доступна на экране блокировке.

    Методы борьбы с проявлениями неактивированной Windows

    Заблокированные настройки персонализации и надписи в правом нижнем углу экрана – не самые удушающие условия бесплатного использования системы. Но и с ними при желании можно решить вопрос. Надписи удаляются утилитой Universal Watermark Disabler. Ну а решений для смены внешнего вида Windows существует множество – от банальной смены картинки рабочего стола с помощью просмотрщиков изображений до установки сторонних программ для управления обоями, в том числе динамическими. С помощью же программ типа WindowBlinds и вовсе можно применять к системе альтернативные темы оформления.

    0xc004f050 — ошибка активации Windows 10

    Ошибка под кодом 0xc004f050 появляется только при попытке активировать ОС во время ее чистой установки.

    Устранение:

    1. При наличии лицензионных Windows 7, 8 или 8.1 необходимо, в первую очередь, установить и осуществить активацию этих версий, после чего – сделать обновление до Windows 10.
    2. Если имеется лицензионный ключ Виндовс 10, то можно установить эту версию, не обращая внимания на допустимые активационные предложения. Также можно запустить активацию на уже установленную операционную систему.

    Как бесплатно активировать Windows 10

    Что бы бесплатно провести процесс активации Windows 10 нам понадобится одна из специальная программ: KMSauto или Re-Loader. Обе себя очень хорошо зарекомендовали среди пользователей и отлично справляются с поставленной задачей. Их не нужно устанавливать (Portable) и они не требуют установки дополнительных программ или драйверов. Так же имеют русский язык в интерфейсе, а значит проблем с использованием не будет.

    KMSauto Net — элементарная активация 10 ки

    Начнем с простого, но рабочего способа, который актуален как никогда. Программа разрабатывается одним популярным программистом Ratiboris и он знает все тонкости активации Windows 10 и Microsoft Office.

    Порядок работы с программой:

    1. Для начала скачиваем архив с активатором (ссылку на скачку вы найдете чуть ниже);
    2. Запускаем KMSAuto Net.exe
      (желательно с правами администратора);
    3. Видим огромную кнопку «Активация
      » — жмякаем на нее;
    4. В следующем окне нажимаем кнопочку «Активировать Windows
      «;
    5. Ожидаем несколько секунд пока не появится надпись «Активация выполнена успешно!
      «;
    6. Можно закрывать приложение.

    Если у вас отобразилась ошибка и активация не прошла, то перед выполнением шага 4 перейдите во вкладку «Система» — там будет раздел «Установка GVLK ключа» — нажмите кнопку «Установить ключ Windows». Это должно исправить ситуацию.

    В итоге весь процесс займет минуты 3 и пары кликов мышкой. Учтите, что запуск KMS активатора может быть заблокирован любым антивирусом (включая защитник Windows) — отключайте их на время применения программы!

    Рассмотрим второй вариант — Re-loader Activator

    Re-loader (Ре Лоадер) поддерживает активацию операционных систем Windows 10, 8.1 и 7 любых редакций и разрядностей, а так же офисных пакетов Microsoft Office (включая 2021 и 365). Принцип его работы очень прост — Loader создает подменный сервер активации и прописывает собственный ключ. В итоге система пытаясь проверить статус лицензии определяет, что ваша копия подлинная и вы больше не встречаете проблем с активацией Win10. Дополнительно в программе реализован способ OEM активации и небольшим бонусом — смена логотипа.

    Windows 10

    — не бесплатная операционная система. Для жителей СНГ покупка лицензионной копии бьет по карману, а пробные версии ОС довольно сильно урезаны в функционале. Поэтому пользователю иногда приходится прибегать к пиратству. Ведь взломанное посредством активации ПО семейства Windows ничем не будет отличаться от продукта, продаваемого в официальном магазине Microsoft.

    Даже с хорошо защищенной 10-кой

    справляется
    KMSAuto Lite
    . Проверенная не одним поколением Windows, программа стала фаворитом среди себе подобных и способна активировать любую версию Виндовс 10 и полностью работоспособна. Никаких дополнительных знаний для ее использования не нужно. Если что всегда можно полагаться на инструкцию, в которой описаны все нюансы работы активатора. Серверные ОС и Office также поддерживаются программой. Переходим к делу.

    Итак, у вас установлена оригинальная Windows 10, которую необходимо активировать. При этом разрядность не важна. Способ работает как с 32, так и с 64-разрядной версией. Сначала убедитесь, что ваш образ не является активированным. Состояние можно узнать в окне Свойства

    компьютера.

    0xc004f014 — ошибка активации Windows 10

    Ошибка под кодом 0xc004f014 появляется при обновлении до Windows 10 Enterprise предыдущих версий ОС 7, 8 или 8.1.

    Активацию системы можно осуществить на основном ПК через KMS клиент. Нужно сделать такие шаги:

    1. Переход в раздел Products в KMS клиенте.

      Раздел Products

    2. Выбор продуктов для постоянной переактивации с конкретным временным промежутком.
    3. Открытие Select Items, далее Install Product Rey (реестр доступных ключей).
    4. Запуск автоматического подбора ключей к определенным продуктам.

    После окончания процедуры подбора – ошибка устраняется.

    Активатор Windows 10 (KMS)

    Проверенный способ активации для новой операционной системы от Microsoft — Windows 10.

    На данный момент — самый надежный вариант получения полнофункциональной лицензии. Решает вопрос с постоянными запросами на покупку и ограниченным функционалом (в частности недоступная «персонализация») и позволяет активировать 10 -ку.

    Программа называется KMSAuto Lite (упрощенная версия) в формате Portable (не требует установки и может работать с флешки). Этой программой лично уже активировал более 15 ПК с «десяткой». Жалоб пока не получил — все довольны. Она на русском языке (rus), а значит трудностей с интерфейсом не будет.

    Инструкция по активации windows 10:

    • Запустить KMS активатор;
    • В Главном окне поставить выбор на ‘Уст. GVLK’;
    • В правой части найти кнопку ‘Ключ Windows’, нажать и ждать окончания операции;
    • Затем в левой части жмем кнопку ‘Активация Windows’, ждем окончания и перезагружаем ПК.

    Kmsauto не активирует windows 10 pro

    Скачать активатор Windows 10:

    Совместимость с x86 и x64.

    Подходит под все редакции «10 (Home / Pro и тп.)».

    Размер: 1.3 Mb
    Версия: 1.2.0
    Пароль: windows
    Скачать: kmsauto-lite-portable

    Загрузка . (16 оценок, среднее: 4,75 из 5)

    0х803f7001 — ошибка активации Windows 10

    Самой распространенной при активации системы является ошибка под кодом 0x803f7001.

    Причины ошибки и ее устранение:

    1. Некорректный ввод ключа активации. Нужно внимательно проверить правильность введения цифр.
    2. Невозможность провести обмен данных между сервером и пользователем. В этой ситуации может быть элементарная перегрузка сервера и он не может принять вашу информацию в этот момент или на компьютере отсутствует подключение к интернету. Решение – сетевая проверка и повторная возможность активации.
    3. Частичная или полная замена аппаратного обеспечения ПК. Нужно повторно ввести лицензионный ключ. Если ошибка не исчезает, рекомендуется обратиться для уточнения информации в службу поддержки клиентов Microsoft.

    Способы активации

    Для получения лицензионной «Десятки» предусмотрено использование 25-символьного ключа или цифровой лицензии. Во втором случае она закрепляется за каждым компьютером и автоматически применяется к той же версии Windows 10 на данном ПК после переустановки при первом же подключении к интернету. Такой способ актуален при переходе с Windows 7 или 8 на новую ОС, её приобретения в Магазине.

    При наличии ключа его нужно ввести по запросу (только при первой переустановке, дальше ключ будет подхватываться автоматически) или на этапе инсталляции операционной системы.

    По телефону

    Устаревший метод, от которого представители Microsoft до сих пор не отказались. Актуален для случаев, если появляются проблемы с проверкой подлинности или серверы корпорации не отвечают.

    1. Зажмите комбинацию клавиш Win + R и выполните в окне команду “slui 4».
    2. Укажите свой регион проживания и нажмите «ОК».
    3. Позвоните по номеру, который появится на экране, и выполните все предписания автоответчика. Последовательность действий лучше записать.
    4. Введите присланный код и активируйте «Десятку».

    Ключ можно получить следующими методами:

    • купить коробочную версию ОС;
    • приобрести цифровую копию;
    • купить Windows 10 в Магазине;
    • обзавестись устройством с предустановленной «Десяткой».

    Активатором

    Нет ключа и желания/возможности тратиться на его покупку? Не беда, в интернете есть всё, но это нарушение условий эксплуатации продукции от Microsoft. Обхитрить, удалить либо отключить механизм проверки подлинности ОС позволяют специальные приложения – активаторы. Они распространяются на множестве ресурсов и нередко в их состав интегрируется вредоносный код. Загружать их следует только с проверенных сайтов.

    Иные способы

    Обзавестись ключом можно в рамках программы Insider (ныне не актуально), подписки MSDN либо корпоративной лицензии.

    Ошибка 0х8007232b при активации Windows 10

    Причины возникновения ошибки под кодом 0х8007232b две:

    1. Отсутствие доступа к сети. Необходимо провести программную диагностику и проверить открывается ли сайт Microsoft. Также перед активацией системы нужно временно отключить действие служб брандмауэра и файервола антивируса, которые могут блокировать сайты, отвечающие за сеть.

      Отключение брандмауэра

    2. Вставлен ключ, который не соответствует версии (например, установлена версия Enterprise, а ключ – от Home). Требуется ввод в окно активации корректного ключа.

    Убрать водяной знак активации Windows с помощью Windows PowerShell

    Обратившись к PowerShell, мы гарантированно убираем надоевший знак на несколько месяцев:

    1. Воспользуйтесь Win + X, войдите в инструмент «Windows PowerShell (администратор)».

      Меню

    2. Вставьте и выполните нажатием на Enter команду slmgr /renew. Перезагрузите систему.

      Администратор

    Ошибка 0хc004f210 при активации Windows 10

    Данный сбой происходит зачастую при указании некорректного ключа продукта, который отличается от выпуска Windows на вашем ПК. Эту ошибку можно исправить посредством правильного ввода 25-значного ключа, соответствующего установленной на компьютере версии Windows.

    Лицензионный ключ продукта

    Не стоит паниковать, если на мониторе всплыло окно с сообщением и кодом ошибки — переустанавливать ОС или обращаться в сервисный центр. Ознакомившись с данной инструкцией, вы можете самостоятельно решить проблемы возникновения сбоя при активации системы.

    Проверка подлинности Windows 10

    В операционной системе Windows 7 была встроена функция проверки введенной лицензии, то есть верификация ключа. К сожалению, начиная с Windows 8 данную функцию убрали, но ввели другую возможность проверки ключа активации, ее то мы и рассмотрим.

    Чтобы проверить подлинность Windows 10/8.1/8 необходимо запустить командную строку или PowerShell. Введите команду slmgr -ato и нажмите Enter. Дождитесь пока появится окно с сообщением. Если ключ подлинный, то вы получите уведомление об успешной активации Windows, как на картинке ниже.

    Если ключ не валидный, то получите ошибку или какое-либо другое уведомление. Пример такого сообщение на скриншоте ниже.

    Проверка подлинности Windows 10 - Ошибка активации

    Валидный ключ позволяет устанавливать обновления Windows и не переживать, что после очередного обновления операционной системы слетит активация и многие функции виндовс заблокируются. Если возникнут какие-либо вопросы, задавайте ниже в форме комментарий, постараюсь помочь.

    Код ошибки «0xc004d307” появляется всякий раз, когда максимальное количество перезапусков превышает определенный предел. “перевооружение” используется в командной строке для продления бесплатного пробного периода Windows. Однако указанная ошибка возникает всякий раз, когда пользователь пытается запустить «SLMGR-REARM” более чем в 3 раза. Это также может произойти после установки новой операционной системы Windows.

    В этом блоге будет представлена ​​серия инструкций по исправлению указанной ошибки.

    Как исправить/исправить ошибку 0xc004d307, чтобы максимизировать разрешенное повторное использование?

    Код ошибки «0xc004d307” можно исправить, следуя приведенному ниже руководству.

    Шаг 1: Запустите редактор реестра

    Сначала запустите «Редактор реестра» из меню «Пуск» Windows:

    Шаг 2. Перейдите к платформе SoftwareProtectionPlatform.

    Скопируйте указанный путь и вставьте его в «Редактор реестра» в строке поиска/адреса и нажмите кнопку «Входить” для перехода по указанному пути:

    >КомпьютерHKEY_LOCAL_MACHINEПРОГРАММНОЕ ОБЕСПЕЧЕНИЕMicrosoftWindows >NTCurrentVersionSoftwareProtectionPlatform

    Шаг 3: Изменить SkipRearm

    Найдите “SkipRearm», щелкните по нему правой кнопкой мыши и выберите «Изменить» вариант:

    Шаг 4. Включите SkipRearm

    Тип «1» в «Значение данных» и нажмите «ХОРОШО” для включения SkipRearm:

    Теперь вы можете запустить команду SLMGR-REARM в CMD.

    Заключение

    Ошибка «0xc004d307, чтобы максимизировать разрешенное перевооружение” можно решить, открыв “Редактор реестра» и перейти к этому «КомпьютерHKEY_LOCAL_MACHINEПРОГРАММНОЕ ОБЕСПЕЧЕНИЕMicrosoftWindows NTCurrentVersionSoftwareProtectionPlatform» путь. Затем найдите «SkipRearm» и измените его, введя «1«в своем»Значение данных» раздел. В этом руководстве даны краткие инструкции по исправлению упомянутой ошибки.

    Если вы подготовили образ операционной системы, запустили sysprep и получили данное окно с ошибкой, действуйте следующим образом:

    Проверьте лог-файл setuperr.log, который находится в папке «%windir%System32sysprepPanther». В случае обнаружения похожих строк,

    [0x0f0073] SYSPRP RunExternalDlls:Not running DLLs; either the machine is in an invalid state or we couldn’t update the recorded state, dwRet = 31
    [0x0f00ae] SYSPRP WinMain:Hit failure while processing sysprep cleanup external providers; hr = 0x8007001f

    откройте реестр и проверьте следующие параметры ключа «HKEY_LOCAL_MACHINESYSTEMSetupStatusSysprepStatus«:

    CleanupState должен быть равен 2,
    GeneralizationState должен быть равен 7.

    Если значения другие, исправьте их и запустите sysprep.

    В ином случае, если вы слишком часто (более 4 раз) запускали скрипт Windows Software Licensing Rearm (slmgr.vbs /rearm) для сброса триального периода, сможете увидеть следующие строки в setuperr.log:

    [0x0f0082] SYSPRP LaunchDll:Failure occurred while executing ‘C:WindowsSystem32slc.dll,SLReArmWindows’, returned error code -1073425657
    [0x0f0070] SYSPRP RunExternalDlls:An error occurred while running registry sysprep DLLs, halting sysprep execution. dwRet = -1073425657
    [0x0f00a8] SYSPRP WinMain:Hit failure while processing sysprep generalize internal providers; hr = 0xc004d307

    Сброс «Rearm» также автоматически производится при выполнении sysprep. Поэтому, если вы используете единый эталонный образ, постоянно раскрываете его для обновлений, а затем заново делаете sysprep, Microsoft рекомендует задействовать файл ответов Unattend.xml примерно следующего содержания:

    
    <?xml version="1.0" encoding="utf-8"?>
    <unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="generalize">
    <component name="Microsoft-Windows-Security-Licensing-SLC" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SkipRearm>1</SkipRearm>
    </component>
    </settings>
    </unattend>
    

    Файл подкладывается в папку с sysprep.exe. Это позволит исключить выполнение Windows Software Licensing Rearm при использовании sysprep. Если целевая ОС 32-битная, значение параметра «processorArchitecture» должно быть установлено в «x86«.
    Для ОС Windows 7/2008R2 и выше можно обойтись без файла ответов. Достаточно изменить значение параметра SkipRearm с 0 на 1 в ветке реестра:

    HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionSoftwhereProtectionPlatform

    После распаковки образа данный параметр автоматически установится в 0.

    This article helps those who get the 0xc004d307 error when trying to rearm (reset the license) Office 2013 in a Virtual Desktop Infrastructure (VDI) and/or those trying to prep the master image for Microsoft Key Management (KMS) activation. (i.e.- Citrix, vmWare, etc.)

    Issue

    In a Windows environment, trying to rearm Office 2013 gets this error:

    Possible Cause

    #1. The rearm count of Office has been exceeded.

    #2. Office was reinstalled or previously upgraded and somehow got corrupted.

    Solution #1. Uninstall/Install Office

    The rearm count in Office has been exceeded. There is no way to fix this. Office needs to be uninstalled and then reinstalled so that you get your rearms back.

    1. Uninstall Office in Programs and Features
    2. Restart the OS
    3. Install Office
    4. Restart the OS
    5. Run the OSPPREARM.exe command again

    You should now see:

    Note: If Solution #1 doesn’t work, try Solution #2.

    Solution #2. Run the Office removal VBS

    I opened a support case with Microsoft after Solution #1 didn’t work. They told me that while uninstalling Office usually resets the rearms, sometimes every component isn’t removed .  This causes a problem when trying to rearm on the fresh install. Running the script (get code below) fully removes all components from Windows.

    1. Uninstall Office in Programs and Features
    2. Copy the script data (get code below) into a text file called script.vbs and save it to the C drive.
      (Note: Make sure you see a script icon and not a text file icon. If you see a text file icon, you need to go into folder options, unhide known file extensions and then remove the .txt from the end of the file name. Make sure it only shows script.vbs)
    3. Double click the script.vbs file to run it 
    4. Restart the OS
    5. Install Office
    6. Restart the OS
    7. Run the OSPPREARM.exe command again

    You should now see:

    Office Removal VBS

    NOTE: I make no promises and am not liable for any problems caused by using this script. It is exactly intact as the way that it was given to me by Microsoft. No modifications have been made. This only works for Office 2013. It does not work in 2016.

    '=======================================================================================================
    ' Name: OffScrub_O15msi.vbs
    ' Author: Microsoft Customer Support Services
    ' Copyright (c) 2011, 2012 Microsoft Corporation
    ' Script to remove (scrub) Office 2013 MSI products
    ' when a regular uninstall is no longer possible
    '=======================================================================================================
    Option Explicit
    
    Const SCRIPTVERSION = "1.72"
    Const SCRIPTFILE    = "OffScrub_O15msi.vbs"
    Const SCRIPTNAME    = "OffScrub_O15msi"
    Const OVERSION      = "15.0"
    Const OVERSIONMAJOR = "15"
    Const OREF          = "Office15"
    Const OREGREF       = "OFFICE15."
    Const ONAME         = "Office 2013 MSI"
    Const OPACKAGE      = "PackageRefs"
    Const OFFICEID      = "000000FF1CE}"
    Const HKCR          = &H80000000
    Const HKCU          = &H80000001
    Const HKLM          = &H80000002
    Const HKU           = &H80000003
    Const FOR_WRITING   = 2
    Const PRODLEN       = 12
    Const COMPPERMANENT = "00000000000000000000000000000000"
    Const UNCOMPRESSED  = 38
    Const SQUISHED      = 20
    Const COMPRESSED    = 32
    Const REG_ARP       = "SOFTWAREMicrosoftWindowsCurrentVersionUninstall"
    Const VB_YES        = 6
    Const MSIOPENDATABASEREADONLY = 0
    
    '=======================================================================================================
    Dim oFso, oMsi, oReg, oWShell, oWmiLocal, oShellApp
    Dim ComputerItem, Item, LogStream, TmpKey
    Dim arrTmpSKUs, arrDeleteFiles, arrDeleteFolders, arrMseFolders, arrVersion
    Dim dicKeepProd, dicKeepLis, dicApps, dicKeepFolder, dicDelRegKey, dicKeepReg
    Dim dicInstalledSku, dicRemoveSku, dicKeepSku, dicSrv, dicCSuite, dicCSingle
    Dim f64, fLegacyProductFound
    Dim sErr, sTmp, sSkuRemoveList, sDefault, sWinDir, sWICacheDir, sMode
    Dim sAppData, sTemp, sScrubDir, sProgramFiles, sProgramFilesX86, sCommonProgramFiles
    Dim sAllusersProfile, sOSinfo, sOSVersion, sCommonProgramFilesX86, sProfilesDirectory
    Dim sProgramData, sLocalAppData, sOInstallRoot
    Dim iVersionNT
    
    '=======================================================================================================
    'Main
    '=======================================================================================================
    'Configure defaults
    Dim sLogDir : sLogDir = ""
    Dim sMoveMessage: sMoveMessage = ""
    Dim fRemoveOse      : fRemoveOse = False
    Dim fRemoveOspp     : fRemoveOspp = False
    Dim fRemoveAll      : fRemoveAll = False
    Dim fRemoveCSuites  : fRemoveCSuites = False
    Dim fRemoveCSingle  : fRemoveCSingle = False
    Dim fRemoveSrv      : fRemoveSrv = False
    Dim fKeepUser       : fKeepUser = True  'Default to keep per user settings
    Dim fSkipSD         : fSkipSD = False 'Default to not Skip the Shortcut Detection
    Dim fDetectOnly     : fDetectOnly = False
    Dim fQuiet          : fQuiet = False
    Dim fBasic          : fBasic = False
    Dim fNoCancel       : fNoCancel = False
    Dim fNoElevate      : fNoElevate = False
    Dim fIsElevated     : fIsElevated = False
    Dim fTryReconcile   : fTryReconcile = False
    'CAUTION! -> "fForce" will kill running applications which can result in data loss! <- CAUTION
    Dim fForce          : fForce = False
    'CAUTION! -> "fForce" will kill running applications which can result in data loss! <- CAUTION
    Dim fLogInitialized : fLogInitialized = False
    Dim fBypass_Stage1  : fBypass_Stage1 = True 'Component Detection
    Dim fBypass_Stage2  : fBypass_Stage2 = False 'Setup
    Dim fBypass_Stage3  : fBypass_Stage3 = False 'Msiexec
    Dim fBypass_Stage4  : fBypass_Stage4 = False 'CleanUp
    Dim fRebootRequired : fRebootRequired = False
    
    'Create required objects
    Set oWmiLocal   = GetObject("winmgmts:{(Debug)}\.rootcimv2")
    Set oWShell     = CreateObject("Wscript.Shell")
    Set oShellApp   = CreateObject("Shell.Application")
    Set oFso        = CreateObject("Scripting.FileSystemObject")
    Set oMsi        = CreateObject("WindowsInstaller.Installer")
    Set oReg        = GetObject("winmgmts:\.rootdefault:StdRegProv")
    
    'Get environment path info
    sAppData            = oWShell.ExpandEnvironmentStrings("%appdata%")
    sLocalAppData       = oWShell.ExpandEnvironmentStrings("%localappdata%")
    sTemp               = oWShell.ExpandEnvironmentStrings("%temp%")
    sAllUsersProfile    = oWShell.ExpandEnvironmentStrings("%allusersprofile%")
    RegReadValue HKLM, "SOFTWAREMicrosoftWindows NTCurrentVersionProfileList", "ProfilesDirectory", sProfilesDirectory, "REG_EXPAND_SZ"
    If NOT oFso.FolderExists(sProfilesDirectory) Then 
    sProfilesDirectory  = oFso.GetParentFolderName(oWShell.ExpandEnvironmentStrings("%userprofile%"))
    End If
    sProgramFiles       = oWShell.ExpandEnvironmentStrings("%programfiles%")
    'Deferred until after architecture check
    'sProgramFilesX86 = oWShell.ExpandEnvironmentStrings("%programfiles(x86)%")
    
    sCommonProgramFiles = oWShell.ExpandEnvironmentStrings("%commonprogramfiles%")
    'Deferred until after architecture check
    'sCommonProgramFilesX86 = oWShell.ExpandEnvironmentStrings("%CommonProgramFiles(x86)%")
    
    sProgramData        = oWSHell.ExpandEnvironmentStrings("%programdata%")
    sWinDir             = oWShell.ExpandEnvironmentStrings("%windir%")
    sWICacheDir         = sWinDir & "" & "Installer"
    sScrubDir           = sTemp & "" & SCRIPTNAME
    
    'Detect if we're running on a 64 bit OS
    Set ComputerItem = oWmiLocal.ExecQuery("Select * from Win32_ComputerSystem")
    For Each Item In ComputerItem
    f64 = Instr(Left(Item.SystemType,3),"64") > 0
    If f64 Then Exit For
    Next
    If f64 Then sProgramFilesX86 = oWShell.ExpandEnvironmentStrings("%programfiles(x86)%")
    If f64 Then sCommonProgramFilesX86 = oWShell.ExpandEnvironmentStrings("%CommonProgramFiles(x86)%")
    
    'Get OS details and VersionNT
    Set ComputerItem =oWmiLocal.ExecQuery("Select * from Win32_OperatingSystem")
    For Each Item in ComputerItem 
    sOSinfo = sOSinfo & Item.Caption 
    sOSinfo = sOSinfo & Item.OtherTypeDescription
    sOSinfo = sOSinfo & ", " & "SP " & Item.ServicePackMajorVersion
    sOSinfo = sOSinfo & ", " & "Version: " & Item.Version
    sOsVersion = Item.Version
    sOSinfo = sOSinfo & ", " & "Codepage: " & Item.CodeSet
    sOSinfo = sOSinfo & ", " & "Country Code: " & Item.CountryCode
    sOSinfo = sOSinfo & ", " & "Language: " & Item.OSLanguage
    Next
    
    'Build the VersionNT number
    arrVersion = Split(sOsVersion,Delimiter(sOsVersion))
    iVersionNt = CInt(arrVersion(0))*100 + CInt(arrVersion(1))
    
    fIsElevated = CheckRegPermissions
    If NOT fIsElevated AND NOT fNoElevate Then
    'Try to relaunch elevated
    RelaunchElevated
    
    'Can't relaunch. Exit out
    If UCase(Mid(Wscript.FullName, Len(Wscript.Path) + 2, 1)) = "C" Then
    If Not fLogInitialized Then CreateLog
    Log "Insufficient registry access permissions - exiting"
    End If
    'Undo temporary entries created in ARP
    TmpKeyCleanUp
    wscript.quit 
    End If
    
    'Ensure CScript as engine
    If Not UCase(Mid(Wscript.FullName, Len(Wscript.Path) + 2, 1)) = "C" Then RelaunchAsCScript
    
    'Create Dictionaries
    Set dicKeepProd = CreateObject("Scripting.Dictionary")
    Set dicInstalledSku = CreateObject("Scripting.Dictionary")
    Set dicRemoveSku = CreateObject("Scripting.Dictionary")
    Set dicKeepSku = CreateObject("Scripting.Dictionary")
    Set dicKeepLis = CreateObject("Scripting.Dictionary")
    Set dicKeepFolder = CreateObject("Scripting.Dictionary")
    Set dicApps = CreateObject("Scripting.Dictionary")
    Set dicDelRegKey = CreateObject("Scripting.Dictionary")
    Set dicKeepReg = CreateObject("Scripting.Dictionary")
    Set dicSrv = CreateObject("Scripting.Dictionary")
    Set dicCSuite = CreateObject("Scripting.Dictionary")
    Set dicCSingle = CreateObject("Scripting.Dictionary")
    
    'Create the temp folder
    If Not oFso.FolderExists(sScrubDir) Then oFso.CreateFolder sScrubDir
    
    'Set the default logging directory
    sLogDir = sScrubDir
    
    'Call the command line parser
    ParseCmdLine
    
    'Get Office Install Folder
    If NOT RegReadValue(HKLM,"SOFTWAREMicrosoftOffice"&OVERSION&"CommonInstallRoot","Path",sOInstallRoot,"REG_SZ") Then 
    sOInstallRoot = sProgramFiles & "Microsoft Office"&OREF
    End If
    
    'Ensure integrity of WI metadata which could fail used APIs otherwise
    EnsureValidWIMetadata HKCU,"SoftwareClassesInstallerProducts",COMPRESSED
    EnsureValidWIMetadata HKCR,"InstallerProducts",COMPRESSED
    EnsureValidWIMetadata HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionInstallerUserDataS-1-5-18Products",COMPRESSED
    EnsureValidWIMetadata HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionInstallerUserDataS-1-5-18Components",COMPRESSED
    EnsureValidWIMetadata HKCR,"InstallerComponents",COMPRESSED
    
    'Add initial known .exe files that might need to be closed
    dicApps.Add "communicator.exe", "communicator.exe"
    dicApps.Add "setup.exe", "setup.exe"
    Select Case OVERSIONMAJOR
    Case "12"
    Case "14"
    dicApps.Add "bcssync.exe","bcssync.exe"
    dicApps.Add "officesas.exe","officesas.exe"
    dicApps.Add "officesasscheduler.exe","officesasscheduler.exe"
    dicApps.Add "msosync.exe","msosync.exe"
    dicApps.Add "onenotem.exe","onenotem.exe"
    Case "15"
    Case Else
    End Select
    
    '-------------------
    'Stage # 0 - Basics |
    '-------------------
    'Build a list with installed/registered Office products
    sTmp = "Stage # 0 " & chr(34) & "Basics" & chr(34) & " (" & Time & ")"
    Log vbCrLf & sTmp & vbCrLf & String(Len(sTmp),"=") & vbCrLf
    
    FindInstalledOProducts
    If dicInstalledSku.Count > 0 Then Log "Found registered product(s): " & Join(RemoveDuplicates(dicInstalledSku.Items),",") &vbCrLf
    
    'Validate the list of products we got from the command line if applicable
    ValidateRemoveSkuList
    
    'Log detection results
    If dicRemoveSku.Count > 0 Then Log "Product(s) to be removed: " & Join(RemoveDuplicates(dicRemoveSku.Items),",")
    sMode = "Selected " & ONAME & " products"
    If Not dicRemoveSku.Count > 0 Then sMode = "Orphaned " & ONAME & " products"
    If fRemoveAll Then sMode = "All " & ONAME & " products"
    Log "Final removal mode: " & sMode
    Log "Remove OSE service: " & fRemoveOse &vbCrLf
    
    'Log preview mode if applicable
    If fDetectOnly Then Log "*************************************************************************"
    If fDetectOnly Then Log "*                          PREVIEW MODE                                 *"
    If fDetectOnly Then Log "* All uninstall and delete operations will only be logged not executed! *"
    If fDetectOnly Then Log "*************************************************************************" & vbCrLf
    
    'Check if there are legacy products installed
    CheckForLegacyProducts
    If fLegacyProductFound Then Log "Found legacy Office products that will not be removed." Else Log "No legacy Office products found."
    
    'Cache .msi files
    If dicRemoveSku.Count > 0 Then CacheMsiFiles
    
    'Log Sku/Prod detection results
    LogSkuResults
    
    'UnPin Shortcuts
    If NOT fSkipSD AND dicRemoveSku.Count > 0 Then
    On Error Resume Next
    Log " Searching for pinned shortcuts"
    CleanShortcuts sAllUsersProfile, False, True
    CleanShortcuts sProfilesDirectory, False, True
    On Error Goto 0
    End If 'NOT SkipSD
    
    
    '--------------------------------
    'Stage # 1 - Component Detection |
    '--------------------------------
    sTmp = "Stage # 1 " & chr(34) & "Component Detection" & chr(34) & " (" & Time & ")"
    Log vbCrLf & sTmp & vbCrLf & String(Len(sTmp),"=") & vbCrLf
    If Not fBypass_Stage1 OR fForce Then
    'Build a list with files which are installed/registered to a product that's going to be removed
    Log "Prepare for CleanUp stages."
    Log "Identifying removable elements. This can take several minutes."
    ScanComponents 
    Else
    Log "Not running Component Detection in default removal."
    End If
    
    'End all running Office applications
    If fForce OR fQuiet Then CloseOfficeApps
    
    '----------------------
    'Stage # 2 - Setup.exe |
    '----------------------
    sTmp = "Stage # 2 " & chr(34) & "Setup.exe" & chr(34) & " (" & Time & ")"
    Log vbCrLf & sTmp & vbCrLf & String(Len(sTmp),"=") & vbCrLf
    If Not fBypass_Stage2 Then
    SetupExeRemoval
    Else
    Log "Skipping Setup.exe because bypass was requested."
    End If
    
    '------------------------
    'Stage # 3 - Msiexec.exe |
    '------------------------
    sTmp = "Stage # 3 " & chr(34) & "Msiexec.exe" & chr(34) & " (" & Time & ")"
    Log vbCrLf & sTmp & vbCrLf & String(Len(sTmp),"=") & vbCrLf
    If Not fBypass_Stage3 Then
    MsiexecRemoval
    Else
    Log "Skipping Msiexec.exe because bypass was requested."
    End If
    
    '--------------------
    'Stage # 4 - CleanUp |
    '--------------------
    'Removal of files and registry settings
    sTmp = "Stage # 4 " & chr(34) & "CleanUp" & chr(34) & " (" & Time & ")"
    Log vbCrLf & sTmp & vbCrLf & String(Len(sTmp),"=") & vbCrLf
    If Not fBypass_Stage4 Then
    
    'Office Source Engine
    If fRemoveOse Then RemoveOSE
    
    'Local Installation Source (MSOCache)
    WipeLIS
    
    'Obsolete files
    If fRemoveAll Then 
    FileWipeAll 
    Else 
    FileWipeIndividual
    End If
    
    'Empty Folders
    DeleteEmptyFolders
    
    'Restore Explorer if needed
    If fForce OR fQuiet Then RestoreExplorer
    
    'Registry data
    RegWipe
    
    'Wipe orphaned files from Windows Installer cache
    MsiClearOrphanedFiles
    
    'Temporary .msi files in scrubcache
    DeleteMsiScrubCache
    
    'Temporary files
    DelScrubTmp
    
    Else
    Log "Skipping CleanUp because bypass was requested."
    End If
    
    If Not sMoveMessage = "" Then Log vbCrLf & "Please remove this folder after next reboot: " & sMoveMessage
    
    'THE END
    Log vbCrLf & "End removal: " & Now & vbCrLf
    Log vbCrLf & "For detailed logging please refer to the log in folder " &chr(34)&sScrubDir&chr(34)&vbCrLf
    
    If fRebootRequired Then
    Log vbCrLf & "A restart is required to complete the operation!"
    If NOT fQuiet Then
    If MsgBox("Do you want to reboot now?",vbYesNo,"Reboot Required") = VB_YES Then
    Dim colOS, oOS
    Dim oWmiReboot
    Set oWmiReboot = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}!\.rootcimv2")
    Set colOS = oWmiReboot.ExecQuery ("Select * from Win32_OperatingSystem")
    For Each oOS in colOS
    oOS.Reboot()
    Next
    End If
    End If
    End If
    
    If NOT fQuiet Then
    For Each Item in Wscript.Arguments
    If Item = "UAC" Then 
    wscript.stdout.write "Press <Enter> to close this window"
    sTemp = wscript.stdin.read(1)
    End If
    Next 'Argument
    End If
    '=======================================================================================================
    '=======================================================================================================
    
    'Stage 0 - 4 Subroutines
    '=======================================================================================================
    
    'Office configuration products are listed with their configuration product name in the "Uninstall" key
    'To identify an Office configuration product all of these condiditions have to be met:
    ' - "SystemComponent" does not have a value of "1" (DWORD) 
    ' - "OPACKAGE" (see constant declaration) entry exists and is not empty
    ' - "DisplayVersion" exists and the 2 leftmost digits are "OVERSIONMAJOR"
    Sub FindInstalledOProducts
    Dim ArpItem, File
    Dim sCurKey, sValue, sConfigName, sProdC, sCVHValue
    Dim sProductCodeList, sProductCode 
    Dim arrKeys, arrMultiSzValues
    Dim fSystemComponent0, fPackages, fDisplayVersion, fReturn, fCategorized
    
    If dicInstalledSku.Count > 0 Then Exit Sub 'Already done from InputBox prompt
    
    'Handle orphaned products to get them added to the detection scope
    If fTryReconcile Then
    For Each File in oFso.GetFolder(sWICacheDir).Files
    If Len(File.Name)>3 Then
    Select Case LCase(Right(File.Name,4))
    Case ".msi"
    sProductCode = ""
    sProductCode = GetMsiProductCode(File.Path)
    If InScope(sProductCode) Then
    If NOT RegKeyExists(HKLM,REG_ARP & sProductCode) Then
    'Ensure the orphaned item is getting removed
    If Len(sSkuRemoveList) > 0 Then
    sSkuRemoveList = sSkuRemoveList & "," & GetProductID(Mid(sProductCode,11,4))
    Else
    sSkuRemoveList = GetProductID(Mid(sProductCode,11,4))
    End If
    'Add to ScrubDir
    oFso.CopyFile File.Path,sScrubDir & "" & prod & ".msi",True
    'Register the product with MSI
    MsiRegisterProduct File.Path
    End If 'NOT sProductCode
    End If 'InScope
    Case Else
    End Select
    End If '>3
    Next 'File
    End If 'fTryReconcile
    
    'Locate standalone Office products that have no configuration product entry and create a
    'temporary configuration entry
    ReDim arrTmpSKUs(-1)
    If RegEnumKey(HKLM,REG_ARP,arrKeys) Then
    For Each ArpItem in arrKeys
    If InScope(ArpItem) Then
    sCurKey = REG_ARP & ArpItem & ""
    fSystemComponent0 = Not (RegReadValue(HKLM,sCurKey,"SystemComponent",sValue,"REG_DWORD") AND (sValue = "1"))
    If (fSystemComponent0 AND (NOT RegReadValue(HKLM,sCurKey,"CVH",sCVHValue,"REG_DWORD"))) Then
    RegReadValue HKLM,sCurKey,"DisplayVersion",sValue,"REG_SZ"
    Redim arrMultiSzValues(0)
    'Logic changed to drop the LCID identifier
    'sConfigName = GetProductID(Mid(ArpItem,11,4)) & "_" & CInt("&h" & Mid(ArpItem,16,4))
    sConfigName = OREGREF & GetProductID(Mid(ArpItem,11,4))
    If NOT RegKeyExists(HKLM,REG_ARP&sConfigName) Then
    'Create a new ARP item
    ReDim Preserve arrTmpSKUs(UBound(arrTmpSKUs)+1)
    arrTmpSKUs(UBound(arrTmpSKUs)) = sConfigName
    oReg.CreateKey HKLM,REG_ARP & sConfigName
    arrMultiSzValues(0) = sConfigName
    oReg.SetMultiStringValue HKLM,REG_ARP & sConfigName,OPACKAGE,arrMultiSzValues
    arrMultiSzValues(0) = ArpItem
    oReg.SetStringValue HKLM, REG_ARP & sConfigName, "Comment", "Temporary OffScrub generated key. Please delete this key!"
    oReg.SetMultiStringValue HKLM,REG_ARP & sConfigName,"ProductCodes",arrMultiSzValues
    oReg.SetStringValue HKLM,REG_ARP & sConfigName,"DisplayVersion",sValue
    oReg.SetStringValue HKLM,REG_ARP & sConfigName,"DisplayName",SCRIPTNAME & "_" & sConfigName
    oReg.SetDWordValue HKLM,REG_ARP & sConfigName,"SystemComponent",0
    Else
    'Update the existing temporary ARP item
    fReturn = RegReadValue(HKLM,REG_ARP&sConfigName,"ProductCodes",sProdC,"REG_MULTI_SZ")
    If NOT InStr(sProdC,ArpItem)>0 Then sProdC = sProdC & chr(34) & ArpItem
    oReg.SetMultiStringValue HKLM,REG_ARP & sConfigName,"ProductCodes",Split(sProdC,chr(34))
    End If 'RegKeyExists
    End If 'fSystemComponent0
    End If 'InScope
    Next 'ArpItem
    End If 'RegEnumKey
    
    'Find the configuration products
    If RegEnumKey(HKLM,REG_ARP,arrKeys) Then
    For Each ArpItem in arrKeys
    sCurKey = REG_ARP & ArpItem & ""
    sValue = ""
    fSystemComponent0 = NOT (RegReadValue(HKLM,sCurKey,"SystemComponent",sValue,"REG_DWORD") AND (sValue = "1"))
    fPackages = RegReadValue(HKLM,sCurKey,OPACKAGE,sValue,"REG_MULTI_SZ")
    fDisplayVersion = RegReadValue(HKLM,sCurKey,"DisplayVersion",sValue,"REG_SZ")
    If fDisplayVersion Then
    If Len(sValue) > 1 Then
    fDisplayVersion = (Left(sValue,2) = OVERSIONMAJOR)
    Else
    fDisplayVersion = False
    End If
    End If
    If (fSystemComponent0 AND fPackages AND fDisplayVersion) Then
    If InStr(ArpItem,".")>0 Then sConfigName = UCase(Mid(ArpItem,InStr(ArpItem,".")+1)) Else sConfigName = UCase(ArpItem)
    If NOT dicInstalledSku.Exists(sConfigName) Then dicInstalledSku.Add sConfigName,sConfigName
    
    'Categorize the SKU
    'Three categories are available: ClientSuite, ClientSingleProduct, Server
    If RegReadValue(HKLM, REG_ARP & OREGREF & sConfigName, "ProductCodes", sProductCodeList, "REG_MULTI_SZ") Then
    fCategorized = False
    For Each sProductCode in Split(sProductCodeList,chr(34))
    If Len(sProductCode) = 38 Then
    If NOT Mid(sProductCode,11,1) = "0" Then
    'Server product
    If NOT dicSrv.Exists(UCase(sConfigName)) Then dicSrv.Add UCase(sConfigName),sConfigName
    fCategorized = True
    Exit For
    Else
    Select Case Mid(sProductCode,11,4)
    'Client Suites
    Case "000F","0011","0012","0013","0014","0015","0016","0017","0018","0019","001A","001B","0029","002B","002E","002F","0030","0031","0033","0035","0037","003D","0044","0049","0061","0062","0066","006C","006D","006F","0074","00A1","00A3","00A9","00BA","00CA","00E0","0100","0103","011A"
    If NOT dicCSuite.Exists(UCase(sConfigName)) Then dicCSuite.Add UCase(sConfigName),sConfigName
    fCategorized = True
    Exit For
    
    Case Else
    End Select
    End If
    
    End If 'Len 38
    Next 'sProductCode
    If NOT fCategorized Then
    If NOT dicCSingle.Exists(UCase(sConfigName)) Then dicCSingle.Add UCase(sConfigName),sConfigName
    End If 'fCategorized
    End If 'RegReadValue "ProductCodes"
    
    End If
    Next 'ArpItem
    End If 'RegEnumKey
    End Sub 'FindInstalledOProducts
    '=======================================================================================================
    
    'Check if there are Office products from previous versions on the computer
    Sub CheckForLegacyProducts
    Const OLEGACY = "78E1-11D2-B60F-006097C998E7}.6000-11D3-8CFE-0050048383C9}.6000-11D3-8CFE-0150048383C9}.BDCA-11D1-B7AE-00C04FB92F3D}.6D54-11D4-BEE3-00C04F990354}"
    Dim Product
    
    'Set safe default
    fLegacyProductFound = True
    
    For Each Product in oMsi.Products
    If Len(Product) = 38 Then
    'Handle O09 - O11 Products
    If InStr(OLEGACY, UCase(Right(Product, 28)))>0 Then
    'Found legacy Office product. Keep flag in default and exit
    Exit Sub
    End If
    If UCase(Right(Product,PRODLEN)) = OFFICEID Then
    Select Case Mid(Product,4,2)
    Case "12", "14"
    'Found legacy Office product. Keep flag in default and exit
    Exit Sub
    Case Else
    End Select
    End If
    End If '38
    Next 'Product
    fLegacyProductFound = False
    
    End Sub 'CheckForLegacyProducts
    '=======================================================================================================
    
    'Create clean list of Products to remove.
    'Strip off bad & empty contents
    Sub ValidateRemoveSkuList
    Dim Sku, Key, sProductCode, sProductCodeList
    Dim arrRemoveSKUs
    
    If fRemoveAll Then
    'Remove all mode
    For Each Key in dicInstalledSku.Keys
    dicRemoveSku.Add Key,dicInstalledSku.Item(Key)
    Next 'Key
    Else
    'Remove individual products or preconfigured configurations mode
    
    'Ensure to have a string with no unexpected contents
    sSkuRemoveList = Replace(sSkuRemoveList,";",",")
    sSkuRemoveList = Replace(sSkuRemoveList," ","")
    sSkuRemoveList = Replace(sSkuRemoveList,Chr(34),"")
    While InStr(sSkuRemoveList,",,")>0
    sSkuRemoveList = Replace(sSkuRemoveList,",,",",")
    Wend
    
    'Prepare 'remove' and 'keep' dictionaries to determine what has to be removed
    
    'Initial pre-fill of 'keep' dic
    For Each Key in dicInstalledSku.Keys
    dicKeepSku.Add Key,dicInstalledSku.Item(Key)
    Next 'Key
    
    'Determine contents of keep and remove dic
    'Individual products
    arrRemoveSKUs = Split(UCase(sSkuRemoveList),",")
    For Each Sku in arrRemoveSKUs
    If Sku = "OSE" Then fRemoveOse = True
    If dicKeepSku.Exists(Sku) Then
    'A Sku to remove has been passed in
    'remove the item from the keep dic
    dicKeepSku.Remove(Sku)
    'Now add it to the remove dic
    If NOT dicRemoveSku.Exists(Sku) Then dicRemoveSku.Add Sku,Sku
    End If
    Next 'Sku
    
    'Client Suite Category
    If fRemoveCSuites Then
    For Each Key in dicInstalledSku.Keys
    If dicCSuite.Exists(Key) Then
    If dicKeepSku.Exists(Key) Then dicKeepSku.Remove(Key)
    If NOT dicRemoveSku.Exists(Key) Then dicRemoveSku.Add Key,Key
    End If
    Next 'Key
    End If 'fRemoveCSuites
    
    'Client Single/Standalone Category
    If fRemoveCSingle Then
    For Each Key in dicInstalledSku.Keys
    If dicCSingle.Exists(Key) Then
    If dicKeepSku.Exists(Key) Then dicKeepSku.Remove(Key)
    If NOT dicRemoveSku.Exists(Key) Then dicRemoveSku.Add Key,Key
    End If
    Next 'Key
    End If 'fRemoveCSingle
    
    'Server Category
    If fRemoveSrv Then
    For Each Key in dicInstalledSku.Keys
    If dicSrv.Exists(Key) Then
    If dicKeepSku.Exists(Key) Then dicKeepSku.Remove(Key)
    If NOT dicRemoveSku.Exists(Key) Then dicRemoveSku.Add Key,Key
    End If
    Next 'Key
    End If 'fRemoveSrv
    
    If NOT dicKeepSku.Count > 0 Then fRemoveAll = True
    
    End If 'fRemoveAll
    
    'Fill the KeepProd dic
    For Each Sku in dicKeepSku.Keys
    If RegReadValue(HKLM,REG_ARP & OREGREF & Sku,"ProductCodes",sProductCodeList,"REG_MULTI_SZ") Then
    For Each sProductCode in Split(sProductCodeList,chr(34))
    If Len(sProductCode) = 38 Then
    If NOT dicKeepProd.Exists(sProductCode) Then dicKeepProd.Add sProductCode,Sku
    End If '38
    Next 'sProductCod 
    End If
    Next 'Sku
    
    If fRemoveAll OR fRemoveOse Then CheckRemoveOSE
    If fRemoveAll OR fRemoveOspp Then CheckRemoveOspp
    
    End Sub 'ValidateRemoveSkuList
    '=======================================================================================================
    
    'Check if OSE service can be scrubbed
    Sub CheckRemoveOSE
    Const O11 = "6000-11D3-8CFE-0150048383C9}"
    Dim Product
    
    If fRemoveOse Then Exit Sub
    For Each Product in oMsi.Products
    If Len(Product) = 38 Then
    If UCase(Right(Product,28)) = O11 Then 
    'Found Office 2003 Product. Set flag to not remove the OSE service
    Exit Sub
    End If
    If UCase(Right(Product,PRODLEN))=OFFICEID Then
    Select Case Mid(Product,4,2)
    Case "12","14","15","16","17"
    'Found another Office product. Set flag to keep the OSE service
    If NOT Mid(Product,4,2) = OVERSIONMAJOR Then
    fRemoveOse = False
    Exit Sub
    End If
    Case Else
    End Select
    End If
    End If '38
    Next 'Product
    fRemoveOse = True
    End Sub 'CheckRemoveOSE
    '=======================================================================================================
    
    'Check if OSPP service can be scrubbed
    Sub CheckRemoveOSPP
    Dim Product
    
    If NOT CInt(OVERSIONMAJOR) > 12 Then 
    fRemoveOspp = False
    Exit Sub
    End If
    
    If fRemoveOspp Then Exit Sub
    For Each Product in oMsi.Products
    If Len(Product) = 38 Then
    If UCase(Right(Product,PRODLEN))=OFFICEID Then
    Select Case Mid(Product,4,2)
    Case "14","15","16","17"
    'Found another Office product. Set flag to keep the OSPP service
    If NOT Mid(Product,4,2) = OVERSIONMAJOR Then
    fRemoveOspp = False
    Exit Sub
    End If
    Case Else
    End Select
    End If
    End If '38
    Next 'Product
    fRemoveOspp = True
    End Sub 'CheckRemoveOSPP
    '=======================================================================================================
    
    'Cache .msi files for products that will be removed in case they are needed for later file detection
    Sub CacheMsiFiles
    Dim Product
    Dim sMsiFile
    
    'Non critical routine for failures.
    'Errors will be logged but must not fail the execution
    On Error Resume Next
    Log " Cache .msi files to temporary Scrub folder"
    'Cache the files
    For Each Product in oMsi.Products
    'Ensure valid GUID length
    If InScope(Product) Then
    If (fRemoveAll OR CheckDelete(Product))Then
    CheckError "CacheMsiFiles"
    sMsiFile = oMsi.ProductInfo(Product,"LocalPackage") : CheckError "CacheMsiFiles"
    LogOnly " - " & Product & ".msi"
    If oFso.FileExists(sMsiFile) Then oFso.CopyFile sMsiFile,sScrubDir & "" & Product & ".msi",True
    CheckError "CacheMsiFiles"
    End If
    End If 'InScope
    Next 'Product
    
    Err.Clear
    End Sub 'CacheMsiFiles
    '=======================================================================================================
    
    'Build a list of all files that will be deleted
    Sub ScanComponents
    Const MSIINSTALLSTATE_LOCAL = 3
    
    Dim FileList, RegList, ComponentID, CompClient, Record, qView, MsiDb, CompVerbose
    Dim Processes, Process, Prop, prod
    Dim sQuery, sSubKeyName, sPath, sFile, sMsiFile, sCompClient, sComponent, sCompReg
    Dim fRemoveComponent, fAffectedComponent, fIsPermanent, fIsFile, fIsFolder
    Dim i, iProgress, iCompCnt, iRemCnt
    Dim dicFLError, oDic, oFolderDic, dicCompPath
    Dim hDefKey
    
    'Logfile
    Set FileList = oFso.OpenTextFile(sScrubDir & "FileList.txt",FOR_WRITING,True,True)
    Set RegList = oFso.OpenTextFile(sScrubDir & "RegList.txt",FOR_WRITING,True,True)
    Set CompVerbose = oFso.OpenTextFile(sScrubDir & "CompVerbose.txt",FOR_WRITING,True,True)
    
    'FileListError dic
    Set dicFLError = CreateObject("Scripting.Dictionary")
    
    Set oDic = CreateObject("Scripting.Dictionary")
    Set oFolderDic = CreateObject("Scripting.Dictionary")
    Set dicCompPath = CreateObject("Scripting.Dictionary")
    
    'Prevent that API errors fail script execution
    On Error Resume Next
    
    iCompCnt = oMsi.Components.Count
    If NOT Err = 0 Then
    'API failure
    Log "Error during components detection. Cannot complete this task."
    Err.Clear
    Exit Sub
    End If
    
    'Ensure to not divide by zero
    If iCompCnt = 0 Then iCompCnt = 1
    LogOnly " Scanning " & iCompCnt & " components"
    'Enum all Components
    For Each ComponentID In oMsi.Components
    CompVerbose.WriteLine vbCrLf & "Checking Component: " & ComponentID
    
    'Progress bar
    i = i + 1
    If iProgress < (i / iCompCnt) * 100 Then 
    wscript.stdout.write "." : LogStream.Write "."
    iProgress = iProgress + 1
    If iProgress = 35 OR iProgress = 70 Then Log ""
    End If
    
    'Check if all ComponentClients will be removed
    sCompClient = ""
    iRemCnt = 0
    fIsPermanent = False
    fRemoveComponent = False 'Flag to track if the component will be completely removed
    fAffectedComponent = False 'Flag to track if some clients remain installed who have a none shared location
    dicCompPath.RemoveAll
    Err.Clear
    For Each CompClient In oMsi.ComponentClients(ComponentID)
    CompVerbose.Write " CompClient " & CompClient & "-> "
    If Err = 0 Then
    'Ensure valid guid length
    If Len(CompClient) = 38 Then
    fRemoveComponent = InScope(CompClient)
    If fRemoveComponent OR (CompClient = "{00000000-0000-0000-0000-000000000000}") Then
    sPath = ""
    sPath = LCase(oMsi.ComponentPath(CompClient,ComponentID))
    sPath = Replace(sPath,"?",":")
    'Scan for msidbComponentAttributesPermanent flag
    If CompClient = "{00000000-0000-0000-0000-000000000000}" Then
    fIsPermanent = True
    iRemCnt = iRemCnt + 1
    End If
    If fRemoveComponent Then fRemoveComponent = CheckDelete(CompClient)
    CompVerbose.Write "CheckDelete: " & fRemoveComponent & "; "
    If fRemoveComponent Then
    iRemCnt = iRemCnt + 1
    fAffectedComponent = True
    'Since the scope remains within one Office family the keypath for the component
    'is assumed to be identical
    If sCompClient = "" Then sCompClient = CompClient
    ' flag the CompClient entry for removal
    sCompReg = "InstallerComponents"&GetCompressedGuid(ComponentID)&""&GetCompressedGuid(CompClient)
    If NOT dicDelRegKey.Exists(sCompReg) Then
    dicDelRegKey.Add sCompReg,HKCR
    RegList.WriteLine HiveString(HKCR)&""&sCompReg
    End If
    sCompReg = "SOFTWAREMicrosoftWindowsCurrentVersionInstallerUserDataS-1-5-18Components"&GetCompressedGuid(ComponentID)&""&GetCompressedGuid(CompClient)
    If NOT dicDelRegKey.Exists(sCompReg) Then
    dicDelRegKey.Add sCompReg,HKLM
    RegList.WriteLine HiveString(HKCR)&""&sCompReg
    End If
    Else
    If NOT dicCompPath.Exists(sPath) Then dicCompPath.Add sPath,CompClient
    End If
    CompVerbose.WriteLine "AffectedComponent: " & fAffectedComponent
    CompVerbose.WriteLine " CompClient now set to: " & sCompClient
    Else
    CompVerbose.Write "InScope: " & fRemoveComponent & "; "
    End If
    Else
    CompVerbose.WriteLine "Error: Invalid metadata"
    If NOT dicFLError.Exists("Error: Invalid metadata found. ComponentID: "&ComponentID &", ComponentClient: "&CompClient) Then _
    dicFLError.Add "Error: Invalid metadata found. ComponentID: "&ComponentID &", ComponentClient: "&CompClient, ComponentID
    End If '38
    Else
    CompVerbose.WriteLine "Error: " & Err.number & " " & Err.Description
    Err.Clear
    End If 'Err = 0
    Next 'CompClient
    
    'Determine if the component resources go away
    sPath = ""
    fRemoveComponent = fAffectedComponent AND (iRemCnt = oMsi.ComponentClients(ComponentID).Count)
    CompVerbose.WriteLine " Component goes away: " & fRemoveComponent
    ' This caused unintentional removals
    '        If NOT fRemoveComponent AND fAffectedComponent Then
    '            'Flag as removable if component has a unique keypath
    '            sPath = LCase(oMsi.ComponentPath(sCompClient,ComponentID))
    '            sPath = Replace(sPath,"?",":")
    '            fRemoveComponent = NOT dicCompPath.Exists(sPath)
    '        End If
    If fRemoveComponent Then
    'Check msidbComponentAttributesPermanent flag
    If fIsPermanent AND NOT fForce Then fRemoveComponent = False
    CompVerbose.WriteLine " msidbComponentAttributesPermanent: " & NOT fRemoveComponent
    End If
    
    If fRemoveComponent Then
    CompVerbose.WriteLine " RESULT: Component IN SCOPE for removal"
    fIsFile = False : fIsFolder = False
    
    'Component resources go away for this product
    Err.Clear
    'Add the component registration key to ensure removal
    sCompReg = "InstallerComponents"&GetCompressedGuid(ComponentID)&""
    If NOT dicDelRegKey.Exists(sCompReg) Then
    dicDelRegKey.Add sCompReg,HKCR
    RegList.WriteLine HiveString(HKCR)&""&sCompReg
    End If
    sCompReg = "SOFTWAREMicrosoftWindowsCurrentVersionInstallerUserDataS-1-5-18Components"&GetCompressedGuid(ComponentID)&""
    If NOT dicDelRegKey.Exists(sCompReg) Then
    dicDelRegKey.Add sCompReg,HKLM
    RegList.WriteLine HiveString(HKCR)&""&sCompReg
    End If
    'Get the component path
    If sPath = "" Then
    sPath = LCase(oMsi.ComponentPath(sCompClient,ComponentID))
    sPath = Replace(sPath,"?",":")
    End If
    CompVerbose.WriteLine " Path: " & sPath
    If Len(sPath) > 4 Then
    If Left(sPath,1) = "0" Then
    'Registry keypath
    
    Select Case Left(sPath,2)
    Case "00"
    sPath = Mid(sPath,5)
    hDefKey = HKCR
    Case "01"
    sPath = Mid(sPath,5)
    hDefKey = HKCU
    Case "02","22"
    sPath = Mid(sPath,5)
    hDefKey = HKLM
    Case Else
    '
    End Select
    If NOT dicDelRegKey.Exists(sPath) Then
    dicDelRegKey.Add sPath,hDefKey
    RegList.WriteLine HiveString(hDefKey)&""&sPath
    End If
    Else
    
    'File or Folder
    If oFso.FileExists(sPath) OR oFso.FolderExists(sPath) Then
    If Right(sPath,1) = "" Then
    fIsFolder = True
    CompVerbose.WriteLine " Folder check OK"
    Else
    fIsFile = True
    CompVerbose.WriteLine " File check OK"
    End If
    If fIsFile Then sPath = oFso.GetFile(sPath).ParentFolder
    If Not oFolderDic.Exists(sPath) Then
    oFolderDic.Add sPath,sPath
    FileList.WriteLine sPath & vbTab & "(FOLDER)"
    End If
    'Get the .msi file
    If oFso.FileExists(sScrubDir & "" & sCompClient & ".msi") Then
    sMsiFile = sScrubDir & "" & sCompClient & ".msi"
    Else
    sMsiFile = oMsi.ProductInfo(sCompClient,"LocalPackage")
    End If
    CompVerbose.WriteLine " Set msi file to : " & sMsiFile
    If Not Err = 0 Then
    CompVerbose.WriteLine " Error: Failed to obtain .msi file for product " & sCompClient
    If NOT dicFLError.Exists("Failed to obtain .msi file for product "&sCompClient) Then _
    dicFLError.Add "Failed to obtain .msi file for product "&sCompClient, ComponentID
    Err.Clear
    End If
    CompVerbose.Write " Open .msi file for reading returned: "
    Set MsiDb = oMsi.OpenDatabase(sMsiFile,MSIOPENDATABASEREADONLY)
    
    If Err = 0 Then
    CompVerbose.WriteLine " SUCCESS"
    'Get the component name from the 'Component' table
    sQuery = "SELECT `Component`,`ComponentId` FROM Component WHERE `ComponentId` = '" & ComponentID &"'"
    Set qView = MsiDb.OpenView(sQuery) : qView.Execute
    Set Record = qView.Fetch()
    If Not Record Is Nothing Then sComponent = Record.Stringdata(1)
    CompVerbose.WriteLine " Obtained ComponentId as: " & sComponent
    
    'Get filenames from the 'File' table
    sQuery = "SELECT `Component_`,`FileName` FROM File WHERE `Component_` = '" & sComponent &"'"
    Set qView = MsiDb.OpenView(sQuery) : qView.Execute
    Set Record = qView.Fetch()
    Do Until Record Is Nothing
    'Read the filename
    sFile = Record.StringData(2)
    If InStr(sFile,"|") > 0 Then sFile = Mid(sFile,InStr(sFile,"|")+1,Len(sFile))
    'sFile = sPath & "" & sFile
    CompVerbose.WriteLine "  File: " & sPath& "" & sFile
    If Not oDic.Exists(sPath & "" & sFile) Then 
    'Exception handler
    fAdd = True
    Select Case UCase(sFile)
    Case "FPERSON.DLL"
    'Catch exception caused by changed .msi keypath authoring logic for smart tags
    For Each prod in oMsi.Products
    If NOT Checkdelete(prod) Then
    If oMsi.FeatureState(prod, "MSTagPluginNamesFiles") = MSIINSTALLSTATE_LOCAL Then
    fAdd = False
    Exit For
    End If
    End If
    Next 'prod
    Case Else
    End Select
    If fAdd Then
    CompVerbose.WriteLine "  Added as new file to dictionary"
    oDic.Add sPath & "" & sFile,sFile
    FileList.WriteLine sFile & vbTab & sPath & "" & sFile
    If Len(sFile)>4 Then
    sFile = LCase(sFile)
    If Right(sFile,4) = ".exe" Then
    If NOT dicApps.Exists(sFile) Then
    Select Case sFile
    Case "setup.exe","ose.exe","osppsvc.exe","explorer.exe"
    Case Else
    dicApps.Add sFile,LCase(sPath) & "" & sFile
    CompVerbose.WriteLine "  Added to the list of processes that need to be closed."
    End Select
    End If 'dicApps.Exists
    End If '.exe
    End If 'Len > 4
    End If 'fAdd
    End If 'oDic.Exists
    Set Record = qView.Fetch()
    Loop
    Set Record = Nothing
    qView.Close
    Set qView = Nothing
    Else
    CompVerbose.WriteLine " Error: Could not read from .msi file"
    If NOT dicFLError.Exists("Error: Could not read from .msi file: "&sMsiFile) Then _
    dicFLError.Add "Error: Could not read from .msi file: "&sMsiFile, ComponentID
    Err.Clear
    End If 'Err = 0
    Else
    CompVerbose.WriteLine " Error: File check FAILED"
    End If 'FileExists(sPath)
    End If
    End If 'Len(sPath) > 4
    Else
    CompVerbose.WriteLine " RESULT: Component NOT in scope for removal"
    If fAffectedComponent Then
    'Add the path to the 'Keep' dictionary
    Err.Clear
    For Each CompClient In oMsi.ComponentClients(ComponentID)
    'Get the component path
    sPath = "" : sPath = LCase(oMsi.ComponentPath(CompClient,ComponentID))
    sPath = Replace(sPath,"?",":")
    
    If Len(sPath) > 4 Then
    If Left(sPath,1) = "0" Then
    'Registry keypath
    
    Select Case Left(sPath,2)
    Case "00"
    sPath = Mid(sPath,5)
    hDefKey = HKCR
    Case "01"
    sPath = Mid(sPath,5)
    hDefKey = HKCU
    Case "02","22"
    sPath = Mid(sPath,5)
    hDefKey = HKLM
    Case Else
    '
    End Select
    If NOT dicKeepReg.Exists(LCase(sPath)) Then
    dicKeepReg.Add LCase(sPath),hDefKey
    End If
    Else
    'File keypath
    If oFso.FileExists(sPath) Then
    If NOT dicKeepFolder.Exists(LCase(sPath)) Then dicKeepFolder.Add LCase(sPath)
    sPath = LCase(oFso.GetFile(sPath).ParentFolder) & ""
    If NOT dicKeepFolder.Exists(sPath) Then AddKeepFolder sPath
    End If
    'Folder keypath
    If oFso.FolderExists(sPath) Then AddKeepFolder sPath
    End If 'Is Registry
    End If 'sPath > 4
    Next 'CompClient
    End If 'fAffectedComponent
    End If 'fRemoveComponent
    Err.Clear
    Next 'ComponentID
    On Error Goto 0
    
    Log " Done" & vbCrLf
    If dicFLError.Count > 0 Then LogOnly Join(dicFLError.Keys,vbCrLf)
    If Not oFolderDic.Count = 0 Then arrDeleteFolders = oFolderDic.Keys Else Set arrDeleteFolders = Nothing
    If Not oDic.Count = 0 Then arrDeleteFiles = oDic.Keys Else Set arrDeleteFiles = Nothing
    End Sub 'ScanComponents
    '=======================================================================================================
    
    
    'Try to remove the products by calling setup.exe
    Sub SetupExeRemoval
    Dim OseService, Service, TextStream
    Dim iSetupCnt, RetVal
    Dim Sku, sConfigFile, sUninstallCmd, sCatalyst, sDll, sDisplayLevel, sNoCancel
    
    iSetupCnt = 0
    If Not dicRemoveSku.Count > 0 Then
    Log " Nothing to remove for Setup.exe"
    Exit Sub
    End If
    
    'Ensure that the OSE service is *installed, *not disabled, *running under System context.
    'If validation fails exit out of this sub.
    Set OseService = oWmiLocal.Execquery("Select * From Win32_Service Where Name like 'ose%'")
    If OseService.Count = 0 Then Exit Sub
    For Each Service in OseService
    If (Service.StartMode = "Disabled") AND (Not Service.ChangeStartMode("Manual")=0) Then Exit Sub
    If (Not Service.StartName = "LocalSystem") AND (Service.Change( , , , , , , "LocalSystem", "")) Then Exit Sub
    Next 'Service
    
    For Each Sku in dicRemoveSku.Keys
    If Sku="CLICK2RUN" Then
    'Already done
    Else
    'Create an "unattended" config.xml file for uninstall
    If fQuiet AND NOT fBasic Then sDisplayLevel = "None" Else sDisplayLevel="Basic"
    If fNoCancel Then sNoCancel="Yes" Else sNoCancel="No"
    Set TextStream = oFso.OpenTextFile(sScrubDir & "config.xml",FOR_WRITING,True,True)
    TextStream.Writeline "<Configuration Product=""" & Sku & """>"
    TextStream.Writeline "<Display Level=""" & sDisplayLevel & """ CompletionNotice=""No"" SuppressModal=""Yes"" NoCancel=""" & sNoCancel & """ AcceptEula=""Yes"" />"
    TextStream.Writeline "<Logging Type=""Verbose"" Path=""" & sLogDir & """ Template=""Microsoft Office " & Sku & " Setup(*).txt"" />"
    TextStream.Writeline "<Setting Id=""MSIRESTARTMANAGERCONTROL"" Value=""Disable"" />"
    TextStream.Writeline "<Setting Id=""SETUP_REBOOT"" Value=""Never"" />"
    TextStream.Writeline "</Configuration>"
    TextStream.Close
    Set TextStream = Nothing
    
    'Ensure path to setup.exe is valid to prevent errors
    sDll = ""
    If RegReadValue(HKLM,REG_ARP & OREGREF & Sku,"UninstallString",sCatalyst,"REG_SZ") Then
    If InStr(LCase(sCatalyst),"/dll")>0 Then sDll = Right(sCatalyst,Len(sCatalyst)-InStr(LCase(sCatalyst),"/dll")+2)
    If InStr(sCatalyst,"/")>0 Then sCatalyst = Left(sCatalyst,InStr(sCatalyst,"/")-1)
    sCatalyst = Trim(Replace(sCatalyst,Chr(34),""))
    If NOT oFso.FileExists(sCatalyst) Then
    sCatalyst = sCommonProgramFiles & "" & OREF & "Office Setup Controllersetup.exe"
    If NOT oFso.FileExists(sCatalyst) AND f64 Then
    sCatalyst = sCommonProgramFilesX86 & "" & OREF & "Office Setup Controllersetup.exe"
    End If
    End If
    If oFso.FileExists(sCatalyst) Then
    sUninstallCmd = Chr(34) & sCatalyst & Chr(34) & " /uninstall " & Sku & " /config " & Chr(34) & sScrubDir & "config.xml" & Chr(34) & sDll 
    iSetupCnt = iSetupCnt + 1
    Log " - Calling Setup.exe to remove " & Sku '& vbCrLf & sUninstallCmd 
    If Not fDetectOnly Then 
    On Error Resume Next
    ' end other instances of setup
    EndCurrentInstalls
    ' call uninstall
    RetVal = oWShell.Run(sUninstallCmd,0,True) : CheckError "SetupExeRemoval"
    Log " - Setup.exe returned: " & SetupRetVal(Retval) & " (" & RetVal & ")" & vbCrLf
    fRebootRequired = fRebootRequired OR (RetVal = "3010")
    On Error Goto 0
    Else
    Log " -> Removal suppressed in preview mode."
    End If
    Else
    Log " Error: Office setup.exe appears to be missing"
    End If 'RetVal = 0) AND oFso.FileExists
    End If 'RegReadValue
    End If 
    Next 'Sku
    If iSetupCnt = 0 Then Log " Nothing to remove for setup."
    End Sub 'SetupExeRemoval
    '=======================================================================================================
    
    'Invoke msiexec to remove individual .MSI packages
    Sub MsiexecRemoval
    
    Dim Product
    Dim i
    Dim sCmd, sReturn, sMsiProp
    Dim fRegWipe
    
    fRegWipe = False
    
    Select Case OVERSIONMAJOR
    Case "11"
    sMsiProp = " REBOOT=ReallySuppress NOLOCALCACHEROLLBACK=1"
    Case "12"
    fRegWipe = True
    sMsiProp = " REBOOT=ReallySuppress NOREMOVESPAWN=True"
    Case "14"
    fRegWipe = True
    sMsiProp = " REBOOT=ReallySuppress NOREMOVESPAWN=True"
    Case "15"
    fRegWipe = True
    sMsiProp = " REBOOT=ReallySuppress NOREMOVESPAWN=True"
    Case Else
    End Select
    
    'Clear up ARP first to avoid possible custom action dependencies
    If fRegWipe Then RegWipeARP
    
    'Check MSI registered products
    'Office System does only support per machine installation so it's sufficient to use Installer.Products
    i = 0
    'sMsiProp = " MSIRESTARTMANAGERCONTROL=Disable" & sMsiProp
    For Each Product in oMsi.Products
    If InScope(Product) Then
    If fRemoveAll OR CheckDelete(Product) Then
    i = i + 1 
    Log " Calling msiexec.exe to remove " & Product
    sCmd = "msiexec.exe /x" & Product & sMsiProp
    If fQuiet AND NOT fBasic Then 
    sCmd = sCmd & " /q"
    Else
    sCmd = sCmd & " /qb-"
    End If
    sCmd = sCmd & " /l*v+ "&chr(34)&sLogDir&"Uninstall_"&Product&".log"&chr(34)
    If NOT fDetectOnly Then 
    ' end other instances of setup
    EndCurrentInstalls
    
    'Execute the uninstall
    LogOnly " - Calling msiexec with '"&sCmd&"'"
    sReturn = oWShell.Run(sCmd, 0, True)
    Log " - msiexec returned: " & SetupRetVal(sReturn) & " (" & sReturn & ")" & vbCrLf
    fRebootRequired = fRebootRequired OR (sReturn = "3010") OR (sReturn = "1618")
    Else
    Log "  -> Removal suppressed in preview mode."
    LogOnly "  -> Command: "&sCmd
    End If
    End If 'CheckDelete
    End If 'InScope
    Next 'Product
    If i = 0 Then Log " Nothing to remove for msiexec"
    End Sub 'MsiexecRemoval
    '=======================================================================================================
    
    'Remove the OSE (Office Source Engine) service
    Sub RemoveOSE
    On Error Resume Next
    Log vbCrLf & "OSE CleanUp"
    DeleteService "ose"
    'Delete the folder
    DeleteFolder sCommonProgramFiles & "Microsoft SharedSource Engine"
    'Delete the registration
    RegDeleteKey HKLM,"SYSTEMCurrentControlSetServicesose"
    End Sub 'RemoveOSE
    '=======================================================================================================
    
    
    'File cleanup operations for the Local Installation Source (MSOCache)
    Sub WipeLIS
    Const LISROOT = "MSOCacheAll Users"
    Dim LogicalDisks, Disk, Folder, SubFolder, MseFolder, File, Files
    Dim arrSubFolders
    Dim sFolder
    Dim fRemoveFolder
    
    Log vbCrLf & "LIS CleanUp"
    'Search all hard disks
    Set LogicalDisks = oWmiLocal.ExecQuery("Select * From Win32_LogicalDisk WHERE DriveType=3")
    For Each Disk in LogicalDisks
    If oFso.FolderExists(Disk.DeviceID & "" & LISROOT) Then
    Set Folder = oFso.GetFolder(Disk.DeviceID & "" & LISROOT)
    For Each Subfolder in Folder.Subfolders
    If Len(Subfolder) > 37 Then
    If fRemoveAll Then 
    If  (Mid(Subfolder.Name,27,PRODLEN) = OFFICEID AND Mid(SubFolder.Name,4,2)=OVERSIONMAJOR) OR _
    LCase(Right(Subfolder.Name,7)) = OVERSIONMAJOR &".data" Then DeleteFolder Subfolder.Path
    Else
    If  (Mid(Subfolder.Name,27,PRODLEN) = OFFICEID AND Mid(SubFolder.Name,4,2)=OVERSIONMAJOR) AND _
    CheckDelete(UCase(Left(Subfolder.Name,38))) AND _
    UCase(Right(Subfolder,1))= UCase(Left(Disk.DeviceID,1))Then DeleteFolder Subfolder.Path
    End If
    End If 'Len > 37
    Next 'Subfolder
    If (Folder.Subfolders.Count = 0) AND (Folder.Files.Count = 0) Then 
    sFolder = Folder.Path
    Set Folder = Nothing
    SmartDeleteFolder sFolder
    End If
    End If 'oFso.FolderExists
    Next 'Disk
    
    'MSECache
    If EnumFolders(sProgramFiles,arrSubFolders) Then
    For Each SubFolder in arrSubFolders
    If UCase(Right(SubFolder,9))="MSECACHE" Then
    ReDim arrMseFolders(-1)
    Set Folder = oFso.GetFolder(SubFolder)
    GetMseFolderStructure Folder
    For Each MseFolder in arrMseFolders
    If oFso.FolderExists(MseFolder) Then
    fRemoveFolder = False
    Set Folder = oFso.GetFolder(MseFolder)
    Set Files = Folder.Files
    For Each File in Files
    If (LCase(Right(File.Name,4))=".msi") Then
    If CheckDelete(ProductCode(File.Path)) Then 
    fRemoveFolder = True
    Exit For
    End If 'CheckDelete
    End If
    Next 'File
    Set Files = Nothing
    Set Folder = Nothing
    If fRemoveFolder Then SmartDeleteFolder MseFolder
    End If 'oFso.FolderExists(MseFolder)
    Next 'MseFolder
    End If
    Next 'SubFolder
    End If 'oFso.FolderExists
    End Sub 'WipeLis
    '=======================================================================================================
    
    'Wipe files and folders as documented in KB 928218
    Sub FileWipeAll
    Dim sFolder
    Dim Folder, Subfolder
    
    If fForce OR fQuiet Then CloseOfficeApps
    
    'Handle other services.
    Select Case OVERSIONMAJOR
    Case "11"
    Case "12"
    Case "14"
    DeleteService "odserv"
    DeleteService "Microsoft Office Groove Audit Service"
    DeleteService "Microsoft SharePoint Workspace Audit Service"
    Case "15"
    Case Else
    End Select
    
    'User specific files
    If NOT fKeepUser Then
    'Delete files that should be backed up before deleting them
    CopyAndDeleteFile sAppdata & "MicrosoftTemplatesNormal.dotm"
    CopyAndDeleteFile sAppdata & "MicrosoftTemplatesNormalemail.dotm"
    sFolder = sAppdata & "microsoftdocument building blocks"
    If oFso.FolderExists(sFolder) Then 
    Set Folder = oFso.GetFolder(sFolder)
    For Each Subfolder In Folder.Subfolders
    If oFso.FileExists(Subfolder & "blocks.dotx") Then CopyAndDeleteFile Subfolder & "blocks.dotx"
    Next 'Subfolder
    Set Folder = Nothing
    End If 'oFso.FolderExists(sFolder)
    End If  
    
    'Run the individual filewipe from component detection first
    FileWipeIndividual
    
    'Take care of the rest
    DeleteFolder sOInstallRoot
    DeleteFolder sCommonProgramFiles & "Microsoft Shared" & OREF
    DeleteFile sAllUsersProfile & "Application DataMicrosoftOfficeDataopa"&OVERSIONMAJOR&".dat"
    DeleteFile sAllUsersProfile & "Application DataMicrosoftOfficeDataopa"&OVERSIONMAJOR&".bak"
    DeleteFile sAllUsersProfile & "MicrosoftOfficeDataopa"&OVERSIONMAJOR&".dat"
    DeleteFile sAllUsersProfile & "MicrosoftOfficeDataopa"&OVERSIONMAJOR&".bak"
    If (fRemoveOspp OR fForce) AND CInt(OVERSIONMAJOR)>12 Then
    DeleteService "osppsvc"
    DeleteFolder sCommonProgramFiles & "Microsoft SharedOfficeSoftwareProtectionPlatform"
    DeleteFolder sAllUsersProfile & "MicrosoftOfficeSoftwareProtectionPlatform"
    End If
    Select Case OVERSIONMAJOR
    Case "12"
    Case "14"
    DeleteFile oWShell.SpecialFolders("AllUsersStartup")&"OfficeSAS.lnk"
    DeleteFile oWShell.SpecialFolders("Startup")&"OneNote 2010 Screen Clipper and Launcher.lnk"
    Case "15"
    Case Else
    End Select
    End Sub 'FileWipeAll
    '=======================================================================================================
    
    'Wipe individual files & folders related to SKU's that are no longer installed
    Sub FileWipeIndividual
    Dim LogicalDisks, Disk,sc
    Dim File, Files, XmlFile, scFiles, oFile, Folder, SubFolder, Processes, Process, item
    Dim sFile, sFolder, sPath, sConfigName, sContents, sProductCode, sLocalDrives,sScQuery
    Dim sValue, sScRoots
    Dim arrSubfolders, arrShortCutRoots
    Dim fKeepFolder, fDeleteSC
    Dim iRet,iCnt,iPos
    
    Log vbCrLf & "File CleanUp"
    If IsArray(arrDeleteFiles) Then
    If fForce OR fQuiet Then
    Log " Doing Action: StopOSE"
    iRet = StopService("ose")
    Set Processes = oWmiLocal.ExecQuery("Select * From Win32_Process Where Name like 'ose%.exe'")
    For Each Process in Processes
    LogOnly " - Running process : " & Process.Name
    Log " -> Ending process: " & Process.Name
    iRet = Process.Terminate()
    Next 'Process
    LogOnly " End Action: StopOSE"
    CloseOfficeApps
    End If
    'Wipe individual files detected earlier
    LogOnly " Removing left behind files"
    For Each sFile in arrDeleteFiles
    If oFso.FileExists(sFile) Then DeleteFile sFile
    Next 'File
    End If 'IsArray
    
    'Wipe Catalyst in commonfiles
    sFolder = sCommonProgramFiles & "microsoft shared"&OREF&"Office Setup Controller"
    If EnumFolderNames(sFolder,arrSubFolders) Then
    For Each SubFolder in arrSubFolders
    sPath = sFolder & SubFolder
    If InStr(SubFolder,".")>0 Then sConfigName = UCase(Left(SubFolder,InStr(SubFolder,".")-1))Else sConfigName = UCase(Subfolder)
    If GetFolderPath(sPath) Then
    Set Folder = oFso.GetFolder(sPath)
    Set Files = Folder.Files
    fKeepFolder = False
    For Each File In Files
    If Len(File.Name)>3 Then
    If (LCase(Right(File.Name,4))=".xml") Then
    If Len(File.Name) >= Len(sConfigName) Then
    If (UCase(Left(File.Name,Len(sConfigName)))=sConfigName) Then
    Set XmlFile = oFso.OpenTextFile(File,1)
    sContents = XmlFile.ReadAll
    Set XmlFile = Nothing
    sProductCode = ""
    On Error Resume Next
    sProductCode = Mid(sContents,InStr(sContents,"ProductCode=")+Len("ProductCode=")+1,38)
    On Error Goto 0
    If Len(sProductCode) = 38 Then
    If CheckDelete(sProductCode) Then DeleteFile File.Path Else fKeepFolder = True
    End If
    End If 'sConfigName
    End If 'Len >=
    End If '.xml
    End If 'Len(File.Name)>3
    Next 'File
    Set Files = Nothing
    Set Folder = Nothing
    If Not fKeepFolder Then DeleteFolder sPath
    End If 'GetFolderPath
    Next 'SubFolder
    End If 'EnumFolderNames
    
    'Wipe Shortcuts
    If NOT fSkipSD Then
    On Error Resume Next
    Log " Searching for shortcuts"
    CleanShortcuts sAllUsersProfile, True, False
    CleanShortcuts sProfilesDirectory, True, False
    On Error Goto 0
    End If 'NOT SkipSD
    Err.Clear
    
    End Sub 'FileWipeIndividual
    '=======================================================================================================
    
    '-------------------------------------------------------------------------------
    '   CleanShortcuts
    '
    '   Recursively search all profile folders for Office shortcuts in scope 
    '-------------------------------------------------------------------------------
    Sub CleanShortcuts (sFolder, fDelete, fUnPin)
    Dim oFolder, fld, file, sc, item
    Dim fDeleteSC
    
    Set oFolder = oFso.GetFolder(sFolder)
    ' exclude system protected link folders
    If CBool(oFolder.Attributes AND 1024) Then Exit Sub
    
    On Error Resume Next
    For Each fld In oFolder.SubFolders
    If Err <> 0 Then
        CheckError "CleanShortcuts: " & vbTab & sFolder
    Else
    CleanShortcuts fld.Path, fDelete, fUnPin
    End If
    Next
    For Each file In oFolder.Files
    If LCase(Right(file.Path, 4)) = ".lnk" Then
    set sc = oWShell.CreateShortcut(file.Path)
    'Compare if the shortcut target is in the list of executables that will be removed
    If Len(sc.TargetPath) > 0 Then
    For Each item in dicApps.Items
    If LCase(sc.TargetPath) = item Then
    fDeleteSC = True
    Exit For
    End If
    Next 'item
    End If
    'Handle Windows Installer shortcuts
    If InStr(sc.TargetPath,"{") > 0 Then
    If Len(sc.TargetPath) >= InStr(sc.TargetPath,"{") + 37 Then
    If CheckDelete(Mid(sc.TargetPath, InStr(sc.TargetPath,"{"), 38)) Then fDeleteSC = True
    End If
    End If
    If fDeleteSC Then 
    If Not IsArray(arrDeleteFolders) Then ReDim arrDeleteFolders(0)
    sFolder = file.Drive & file.Path
    If Not arrDeleteFolders(UBound(arrDeleteFolders)) = sFolder Then
    ReDim Preserve arrDeleteFolders(UBound(arrDeleteFolders) + 1)
    arrDeleteFolders(UBound(arrDeleteFolders)) = sFolder
    End If
    If fUnPin Then UnPin file
    If fDelete Then DeleteFile file.Path
    End If 'fDeleteSC
    End If
    Next
    On Error Goto 0
    End Sub 'CleanShortcuts
    
    '-------------------------------------------------------------------------------
    '   UnPin
    '
    '   Unpins a shortcut from the taskbar or start menu 
    '-------------------------------------------------------------------------------
    Sub UnPin(file)
    Dim fldItem, verb
    
    On Error Resume Next
    Set fldItem = oShellApp.NameSpace(file.ParentFolder.Path).ParseName(file.Name)
    For Each verb in fldItem.Verbs
    Select Case Replace(verb, "&", "")
    Case "Unpin from Taskbar", "Von Taskleiste lösen", "Détacher du barre des tâches", "Détacher de la barre des tâches", "Desanclar de la barra de tareas", "Ta bort från Aktivitetsfältet", "??? ????????(K)", "?? ????? ??(K)", "????????? ?? ?????? ?????"
    verb.DoIt
    Case "Unpin from Start Menu", "Vom Startmenü lösen", "Détacher du menu Démarrer", "Détacher de la menu Démarrer"
    If iVersionNT = 601 Then verb.DoIt
    End Select
    Next
    On Error Goto 0
    End Sub
    
    
    '=======================================================================================================
    
    Sub DelScrubTmp
    
    On Error Resume Next
    If oFso.FolderExists(sScrubDir & "ScrubTmp") Then oFso.DeleteFolder sScrubDir & "ScrubTmp",True
    
    End Sub 'DelScrubTmp
    '=======================================================================================================
    
    'Ensure there are no unexpected .msi files in the scrub folder
    Sub DeleteMsiScrubCache
    Dim Folder, File, Files
    
    Log vbCrLf & "ScrubCache CleanUp"
    Set Folder = oFso.GetFolder(sScrubDir) : CheckError "DeleteMsiScrubCache"
    Set Files = Folder.Files
    For Each File in Files
    CheckError "DeleteMsiScrubCache"
    If LCase(Right(File.Name,4))=".msi" Then
    CheckError "DeleteMsiScrubCache"
    DeleteFile File.Path : CheckError "DeleteMsiScrubCache"
    End If
    Next 'File
    End Sub 'DeleteMsiScrubCache
    '=======================================================================================================
    
    Sub MsiClearOrphanedFiles
    Const USERSIDEVERYONE = "s-1-1-0"
    Const MSIINSTALLCONTEXT_ALL = 7
    Const MSIPATCHSTATE_ALL = 15
    
    'Error handling inlined
    On Error Resume Next
    
    Dim Patch, AllPatches, Product, AllProducts
    Dim File, Files, Folder
    Dim sFName, sLocalMsp, sLocalMsi, sPatchList, sMsiList
    
    Set Folder = oFso.GetFolder(sWinDir & "Installer")
    Set Files = Folder.Files
    
    Log vbCrLf & "Windows Installer cache CleanUp"
    'Get a complete list of patches
    Err.Clear
    Set AllPatches = oMsi.PatchesEx("",USERSIDEVERYONE,MSIINSTALLCONTEXT_ALL,MSIPATCHSTATE_ALL)
    If Err <> 0 Then
    CheckError "MsiClearOrphanedFiles (msp)"
    Else
    'Fill a comma separated stringlist with all .msp patchfiles
    For Each Patch in AllPatches
    sLocalMsp = "" : sLocalMsp = LCase(Patch.Patchproperty("LocalPackage")) : CheckError "MsiClearOrphanedFiles (msp)"
    sPatchList = sPatchList & sLocalMsp & ","
    Next 'Patch
    
    'Delete all non referenced .msp files from %windir%installer
    For Each File in Files
    sFName = "" : sFName = LCase(File.Path)
    If LCase(Right(sFName,4)) = ".msp" Then
    If Not InStr(sPatchList,sFName) > 0 Then
    'While this is an orphaned file keep the scope of Office only
    If InStr(UCase(MspTargets(File.Path)),OFFICEID)>0 Then DeleteFile File.Path
    End If
    End If 'LCase(Right(sFName,4))
    Next 'File
    End If 'Err=0
    
    'Get a complete list products
    Err.Clear
    Set AllProducts = oMsi.ProductsEx("",USERSIDEVERYONE,MSIINSTALLCONTEXT_ALL)
    If Err <> 0 Then
    CheckError "MsiClearOrphanedFiles (msi)"
    Else
    'Fill a comma separated stringlist with all .msi files
    For Each Product in AllProducts
    sLocalMsi = "" : sLocalMsi = LCase(Product.InstallProperty("LocalPackage")) : CheckError "MsiClearOrphanedFiles (msi)"
    sMsiList = sMsiList & sLocalMsi & ","
    Next 'Product
    
    'Delete all non referenced .msi files from %windir%installer
    For Each File in Files
    sFName = "" : sFName = LCase(File.Path)
    If LCase(Right(sFName,4)) = ".msi" Then
    If Not InStr(sMsiList,sFName) > 0 Then
    'While this is an orphaned file keep the scope of Office only
    If UCase(Right(ProductCode(File.Path),PRODLEN))=OFFICEID Then DeleteFile File.Path
    End If
    End If 'LCase(Right(sFName,4)) = ".msi"
    Next 'File
    End If 'Err=0
    
    End Sub 'MsiClearOrphanedFiles
    '=======================================================================================================
    
    Sub RegWipe
    Dim Item, Name, Sku, key
    Dim hDefKey, sSubKeyName, sCurKey, value, sValue, sGuid
    Dim fkeep, fSystemComponent0, fPackages, fDisplayVersion
    Dim arrKeys, arrNames, arrTypes, arrMultiSzValues, arrMultiSzNewValues
    Dim arrTestNames,arrTestTypes
    Dim i, iLoopCnt, iPos
    Dim fDelReg
    
    Log vbCrLf & "Registry CleanUp"
    'Wipe registry data
    
    'User Profile settings
    Log " - User Policies"
    RegDeleteKey HKCU,"SoftwarePoliciesMicrosoftOffice" & OVERSION & ""
    If NOT fKeepUser Then
    RegDeleteKey HKCU,"SoftwareMicrosoftOffice" & OVERSION & ""
    Log " - User Settings"
    End If 'fKeepUser
    
    'Computer specific settings
    If fRemoveAll Then
    Log " - Machine Settings"
    RegDeleteKey HKLM,"SOFTWAREMicrosoftOffice" & OVERSION & ""
    If fRemoveOse OR fForce Then
    RegDeleteKey HKLM,"SOFTWAREMicrosoftOffice Test"
    RegDeleteValue HKLM,"SOFTWAREMicrosoftOfficeCommon","LastAccessInstall", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftOfficeCommon","MID", False
    RegDeleteKey HKLM,"SOFTWAREMicrosoftOfficeExcelAddinsMicrosoft.PerformancePoint.Planning.Client.Excel"
    RegDeleteValue HKLM,"SOFTWAREMicrosoftOfficeInfoPathConvertersImportInfoPath.DesignerExcelImportVersions",OVERSION, False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftOfficeInfoPathConvertersImportInfoPath.DesignerWordImportVersions",OVERSION, False
    RegDeleteKey HKLM,"SOFTWAREMicrosoftOfficeOutlook"
    RegDeleteKey HKLM,"SOFTWAREMicrosoftShared ToolsText ConvertersExportMEWord12"
    RegDeleteKey HKLM,"SOFTWAREMicrosoftShared ToolsText ConvertersExportWord12"
    RegDeleteKey HKLM,"SOFTWAREMicrosoftShared ToolsText ConvertersExportWord97"
    RegDeleteKey HKLM,"SOFTWAREMicrosoftShared ToolsText ConvertersImportMEWord12"
    RegDeleteKey HKLM,"SOFTWAREMicrosoftShared ToolsText ConvertersImportWord12"
    RegDeleteKey HKLM,"SOFTWAREMicrosoftShared ToolsText ConvertersImportWord97"
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionRun","GrooveMonitor", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionRun","LobiServer", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionRun","BCSSync", False
    RegDeleteKey HKLM,"SYSTEMCurrentControlSetServicesOutlook"
    End If
    RegDeleteValue HKLM,"SOFTWAREMicrosoftOfficeCommonOffDiagLocation",OVERSIONMAJOR, False
    RegDeleteKey HKLM,"SOFTWAREMicrosoftWindows NTCurrentVersionTerminal ServerInstallSoftwareMicrosoftOffice" & OVERSION & ""
    RegDeleteValue HKLM,"SOFTWAREMicrosoftOfficeCommonOffDiagLocation",OVERSIONMAJOR, False
    RegDeleteKey HKLM,"SOFTWAREMicrosoftOfficeCustomizeWizard" & OVERSION & ""
    RegDeleteKey HKLM,"SOFTWAREMicrosoftWindows NTCurrentVersionTerminal ServerInstallSOFTWAREMicrosoftOfficeCustomizeWizard" & OVERSION & ""
    
    Select Case OVERSIONMAJOR
    Case "11"
    'Jet_Replication
    sValue = ""
    If RegReadValue(HKCR,"CLSID{CC2C83A6-9BE4-11D0-98E7-00C04FC2CAF5}InprocServer32","SystemDB",sValue,"REG_SZ") Then
    If Len(sValue) > Len(sOInstallRoot) Then
    If LCase(Left(sValue,Len(sOInstallRoot))) = LCase(sOInstallRoot) Then RegDeleteKey HKCR,"CLSID{CC2C83A6-9BE4-11D0-98E7-00C04FC2CAF5}InprocServer32"
    End If
    End If
    Case "12"
    Case "14"
    RegDeleteKey HKLM,"SOFTWAREMicrosoftOfficeSoftwareProtectionPlatform"
    RegDeleteKey HKLM,"SOFTWAREMicrosoftOfficeSoftwareProtectionPlatform_Test"
    RegDeleteKey HKLM,"SOFTWAREMicrosoftOfficeCommonActiveX Compatibility{00024512-0000-0000-C000-000000000046}"
    RegDeleteValue HKLM,"SOFTWAREMicrosoftOfficeOneNoteAdapters","{456B0D0E-49DD-4C95-8DB6-175F54DE69A3}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{42042206-2D85-11D3-8CFF-005004838597}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{993BE281-6695-4BA5-8A2A-7AACBFAAB69E}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{0006F045-0000-0000-C000-000000000046}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{C41662BB-1FA0-4CE0-8DC5-9B7F8279FF97}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{7CCA70DB-DE7A-4FB7-9B2B-52E2335A3B5A}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{506F4668-F13E-4AA1-BB04-B43203AB3CC0}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{D66DC78C-4F61-447F-942B-3FB6980118CF}", False
    RegDeleteKey HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionExplorerBrowser Helper Objects{B4F3A835-0E21-4959-BA22-42B3008E02FF}"
    'Groove Extensions 
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionExplorerShellExecuteHooks","{B5A7F190-DDA6-4420-B3BA-52453494E6CD}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{99FD978C-D287-4F50-827F-B2C658EDA8E7}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{AB5C5600-7E6E-4B06-9197-9ECEF74D31CC}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{920E6DB1-9907-4370-B3A0-BAFC03D81399}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{16F3DD56-1AF5-4347-846D-7C10C4192619}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{2916C86E-86A6-43FE-8112-43ABE6BF8DCC}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{72853161-30C5-4D22-B7F9-0BBC1D38A37E}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{6C467336-8281-4E60-8204-430CED96822D}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{2A541AE1-5BF6-4665-A8A3-CFA9672E4291}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{B5A7F190-DDA6-4420-B3BA-52453494E6CD}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{A449600E-1DC6-4232-B948-9BD794D62056}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{3D60EDA7-9AB4-4DA8-864C-D9B5F2E7281D}", False
    RegDeleteValue HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionShell ExtensionsApproved","{387E725D-DC16-4D76-B310-2C93ED4752A0}", False
    RegDeleteKey HKLM,"SOFTWAREClasses*shellexContextMenuHandlersXXX Groove GFS Context Menu Handler XXX"
    RegDeleteKey HKLM,"SOFTWAREClassesAllFilesystemObjectsshellexContextMenuHandlersXXX Groove GFS Context Menu Handler XXX"
    RegDeleteKey HKLM,"SOFTWAREClassesDirectoryshellexContextMenuHandlersXXX Groove GFS Context Menu Handler XXX"
    RegDeleteKey HKLM,"SOFTWAREClassesFolderShellExContextMenuHandlersXXX Groove GFS Context Menu Handler XXX"
    RegDeleteKey HKLM,"SOFTWAREClassesDirectoryBackgroundshellexContextMenuHandlersXXX Groove GFS Context Menu Handler XXX"
    RegDeleteKey HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionExplorerShellIconOverlayIdentifiersGroove Explorer Icon Overlay 1 (GFS Unread Stub)"
    RegDeleteKey HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionExplorerShellIconOverlayIdentifiersGroove Explorer Icon Overlay 2 (GFS Stub)"
    RegDeleteKey HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionExplorerShellIconOverlayIdentifiersGroove Explorer Icon Overlay 2.5 (GFS Unread Folder)"
    RegDeleteKey HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionExplorerShellIconOverlayIdentifiersGroove Explorer Icon Overlay 3 (GFS Folder)"
    RegDeleteKey HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionExplorerShellIconOverlayIdentifiersGroove Explorer Icon Overlay 4 (GFS Unread Mark)"
    RegDeleteKey HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionExplorerBrowser Helper Objects{72853161-30C5-4D22-B7F9-0BBC1D38A37E}"
    
    Case 15
    
    Case Else
    End Select
    
    'Win32Assemblies
    Log " - Win32Assemblies"
    If RegEnumKey(HKCR,"InstallerWin32Assemblies",arrKeys) Then
    For Each Item in arrKeys
    If InStr(UCase(Item),OREF)>0 Then RegDeleteKey HKCR,"InstallerWin32Assemblies"&Item & ""
    Next 'Item
    End If 'RegEnumKey
    'Groove blocks reinstall if it locates groove.exe over this key
    If RegKeyExists(HKCR,"GrooveFileShellOpenCommand") Then
    sValue = ""
    RegReadValue HKCR,"GrooveFileShellOpenCommand","",sValue,"REG_SZ"
    If InStr(sValue,""&OREF&"")>0 Then RegDeleteKey HKCR,"GrooveFile"
    End If 'RegKeyExists
    End If 'fRemoveAll
    
    Select Case OVERSIONMAJOR
    Case "11"
    For iLoopCnt = 1 to 3
    Select Case iLoopCnt
    Case 1
    'CIW - HKCU
    sSubKeyName = "SoftwareMicrosoftOfficeCustomizeWizard" & OVERSION & "RegKeyPaths"
    hDefKey = HKCU
    Case 2 
    'CIW - HKLM
    sSubKeyName = "SOFTWAREMicrosoftOfficeCustomizeWizard" & OVERSION & "RegKeyPaths"
    hDefKey = HKLM
    Case 3
    'Add/Remove Programs
    sSubKeyName = REG_ARP
    hDefKey = HKLM
    End Select
    
    If RegEnumKey(hDefKey,sSubKeyName,arrKeys) Then
    For Each Item in arrKeys
    'OFFICEID id
    If Len(Item)>37 Then
    sGuid = UCase(Left(Item,38))
    If Right(sGuid,PRODLEN)=OFFICEID Then
    If CheckDelete(sGuid) Then 
    RegDeleteKey hDefKey, sSubKeyName & Item & ""
    End If
    End If 'Right(Item,PRODLEN)=OFFICEID
    End If 'Len(Item)>37
    Next 'Item
    If iLoopCnt < 3 Then
    If RegEnumValues(hDefKey,sSubKeyName,arrNames,arrTypes) Then
    i = 0
    For Each Name in arrNames
    If RegReadValue(hDefKey,sSubKeyName,Name,sValue,arrTypes(i)) Then
    If sValue = sGuid Then RegDeleteValue hDefKey,sSubKeyName,Name, False
    End If
    i = i + 1
    Next
    End If
    End If
    End If
    If NOT RegEnumKey(hDefKey,sSubKeyName,arrKeys) Then RegDeleteKey hDefKey,"SoftwareMicrosoftOfficeCustomizeWizard11.0"
    If NOT RegEnumKey(hDefKey,"SoftwareMicrosoftOfficeCustomizeWizard11.0",arrKeys) Then RegDeleteKey hDefKey,"SoftwareMicrosoftOfficeCustomizeWizard"
    Next 'iLoopCnt
    Case "12"
    'Add/Remove Programs
    RegWipeARP 
    Case "14"
    'Add/Remove Programs
    RegWipeARP 
    Case Else
    End Select
    
    'UpgradeCodes, WI config, WI global config
    For iLoopCnt = 1 to 5
    Select Case iLoopCnt
    Case 1
    Log " - HKLM UpgradeCodes"
    sSubKeyName = "SOFTWAREMicrosoftWindowsCurrentVersionInstallerUpgradeCodes"
    hDefKey = HKLM
    Case 2 
    Log " - HKCR UpgradeCodes"
    sSubKeyName = "InstallerUpgradeCodes"
    hDefKey = HKCR
    Case 3
    Log " - HKLM Products"
    sSubKeyName = "SOFTWAREMicrosoftWindowsCurrentVersionInstallerUserDataS-1-5-18Products"
    hDefKey = HKLM
    Case 4 
    Log " - HKCR Features"
    sSubKeyName = "InstallerFeatures"
    hDefKey = HKCR
    Case 5 
    Log " - HKCR Products"
    sSubKeyName = "InstallerProducts"
    hDefKey = HKCR
    Case Else
    sSubKeyName = ""
    hDefKey = ""
    End Select
    If RegEnumKey(hDefKey,sSubKeyName,arrKeys) Then
    For Each Item in arrKeys
    'Ensure we have the expected length for a compressed GUID
    If Len(Item)=32 Then
    'Expand the GUID
    sGuid = GetExpandedGuid(Item) 
    'Check if it's an Office key
    If InScope(sGuid) Then
    If fRemoveAll Then
    RegDeleteKey hDefKey,sSubKeyName & Item & ""
    Else
    If iLoopCnt < 3 Then
    'Enum all entries
    RegEnumValues hDefKey,sSubKeyName & Item,arrNames,arrTypes
    If IsArray(arrNames) Then
    'Delete entries within removal scope
    For Each Name in arrNames
    If Len(Name)=32 Then
    sGuid = GetExpandedGuid(Name)
    If CheckDelete(sGuid) Then RegDeleteValue hDefKey, sSubKeyName & Item & "", Name, True
    Else
    'Invalid data -> delete the value
    RegDeleteValue hDefKey, sSubKeyName & Item & "", Name, True
    End If
    Next 'Name
    End If 'IsArray(arrNames)
    'If all entries were removed - delete the key
    RegEnumValues hDefKey,sSubKeyName & Item,arrNames,arrTypes
    If Not IsArray(arrNames) Then RegDeleteKey hDefKey, sSubKeyName & Item & ""
    Else 'iLoopCnt >= 3
    If CheckDelete(sGuid) Then RegDeleteKey hDefKey, sSubKeyName & Item & ""
    End If 'iLoopCnt < 3
    End If 'fRemoveAll
    End If 'InScope
    End If 'Len(Item)=32
    Next 'Item
    End If 'RegEnumKey
    Next 'iLoopCnt
    
    'Components
    Log " - Global Components"
    sSubKeyName = "SOFTWAREMicrosoftWindowsCurrentVersionInstallerUserDataS-1-5-18Components"
    If RegEnumKey(HKLM,sSubKeyName,arrKeys) Then
    For Each Item in arrKeys
    'Ensure we have the expected length for a compressed GUID
    If Len(Item)=32 Then
    If RegEnumValues(HKLM,sSubKeyName & Item,arrNames,arrTypes) Then
    If IsArray(arrNames) Then
    For Each Name in arrNames
    If Len(Name)=32 Then
    sGuid = GetExpandedGuid(Name)
    If CheckDelete(sGuid) Then
    RegDeleteValue HKLM, sSubKeyName & Item & "", Name, False
    'Check if the key is now empty
    If NOT RegEnumValues(HKLM,sSubKeyName & Item,arrTestNames,arrTestTypes) Then
    If NOT dicDelRegKey.Exists(sSubKeyName&Item&"") Then dicDelRegKey.Add sSubKeyName&Item&"",HKCR
    End If
    End If
    End If '32
    Next 'Name
    End If 'IsArray
    End If 'RegEnumValues
    End If '32
    Next 'Item
    End If 'RegEnumKey
    
    'Published Components
    Log " - Published Components"
    sSubKeyName = "InstallerComponents"
    If RegEnumKey(HKCR,sSubKeyName,arrKeys) Then
    For Each Item in arrKeys
    'Ensure we have the expected length for a compressed GUID
    If Len(Item)=32 Then
    If RegEnumValues(HKCR,sSubKeyName & Item,arrNames,arrTypes) Then
    If IsArray(arrNames) Then
    For Each Name in arrNames
    If RegReadValue (HKCR,sSubKeyName & Item, Name, sValue,"REG_MULTI_SZ") Then
    arrMultiSzValues = Split(sValue,chr(34))
    If IsArray(arrMultiSzValues) Then
    i = -1
    ReDim arrMultiSzNewValues(-1)
    fDelReg = False
    For Each value in arrMultiSzValues
    If Len(value) > 19 Then
    sGuid = ""
    If GetDecodedGuid(Left(value,SQUISHED),sGuid) Then
    If CheckDelete(sGuid) Then
    fDelReg = True
    Else
    i = i + 1 
    ReDim Preserve arrMultiSzNewValues(i)
    arrMultiSzNewValues(i) = value
    End If 'CheckDelete
    End If 'decode
    End If '19
    Next 'Value
    If NOT (i = -1) Then
    If NOT fDetectOnly Then 
    If NOT UBound(arrMultiSzValues) = i Then oReg.SetMultiStringValue HKCR,sSubKeyName & Item,Name,arrMultiSzNewValues
    End If
    Else
    If fDelReg Then
    RegDeleteValue HKCR,sSubKeyName & Item & "", Name, False
    'Check if the key is now empty
    If NOT RegEnumValues(HKCR,sSubKeyName & Item,arrTestNames,arrTestTypes) Then
    If NOT dicDelRegKey.Exists(sSubKeyName&Item&"") Then dicDelRegKey.Add sSubKeyName&Item&"",HKCR
    End If
    End If 'DelReg
    End If
    End If 'IsArray
    End If
    Next 'Name
    End If 'IsArray
    End If 'RegEnumValues
    End If '32
    Next 'Item
    End If 'RegEnumKey
    
    'Delivery
    Log " - Delivery"
    hDefKey = HKLM
    sSubKeyName = "SOFTWAREMicrosoftOfficeDeliverySourceEngineDownloads"
    If RegEnumKey(HKLM,sSubKeyName,arrKeys) Then
    For Each Item in arrKeys
    If Len(Item) > 37 Then
    If fRemoveAll Then
    If (Mid(Item,27,PRODLEN)=OFFICEID AND Mid(Item,4,2)=OVERSIONMAJOR) OR _
    LCase(Right(Item,7))=OVERSIONMAJOR&".data" Then RegDeleteKey HKLM,sSubKeyName & Item & ""
    Else
    If (Mid(Item,27,PRODLEN)=OFFICEID AND Mid(Item,4,2)=OVERSIONMAJOR) AND _
    CheckDelete(UCase(Left(Item,38))) Then RegDeleteKey HKLM,sSubKeyName & Item & ""
    End If
    End If '37
    Next 'Item
    End If 'RegEnumKey
    
    'Registration
    Log " - HKLM Registration"
    hDefKey = HKLM
    sSubKeyName = "SOFTWAREMicrosoftOffice"&OVERSION&"Registration"
    If RegEnumKey(HKLM,sSubKeyName,arrKeys) Then
    For Each Item in arrKeys
    If Len(Item)>37 Then
    If CheckDelete(UCase(Left(Item,38))) Then RegDeleteKey HKLM,sSubKeyName & Item & ""
    End If
    Next 'Item
    End If 'RegEnumKey
    
    'User Preconfigurations
    Log " - HKLM User Preconfigurations"
    hDefKey = HKLM
    sSubKeyName = "SOFTWAREMicrosoftOffice"&OVERSION&"User Settings"
    If RegEnumKey(HKLM,sSubKeyName,arrKeys) Then
    For Each Item in arrKeys
    If Len(Item)>37 Then
    If CheckDelete(UCase(Left(Item,38))) Then RegDeleteKey HKLM,sSubKeyName & Item & ""
    End If
    Next 'Item
    End If 'RegEnumKey
    
    'Known Keypath settings
    Log " - Detcted KeyPath settings"
    For Each key in dicDelRegKey.Keys
    If Right(key,1) = "" Then
    RegDeleteKey dicDelRegKey.Item(key),key
    Else
    iPos = InStrRev(Key,"")
    If iPos > 0 Then RegDeleteValue dicDelRegKey.Item(key), Left(key,iPos - 1), Mid(key,iPos+1), False
    End If
    Next
    
    'Temporary entries in ARP
    TmpKeyCleanUp
    End Sub 'RegWipe
    '=======================================================================================================
    
    'Clean up Add/Remove Programs registry
    Sub RegWipeARP
    
    Dim Item, Name, Sku, key
    Dim sSubKeyName, sCurKey, sValue, sGuid
    Dim fkeep, fSystemComponent0, fPackages, fDisplayVersion
    Dim arrKeys
    
    'Add/Remove Programs
    sSubKeyName = REG_ARP
    If RegEnumKey(HKLM,sSubKeyName,arrKeys) Then
    For Each Item in arrKeys
    '*0FF1CE*
    If Len(Item)>37 Then
    sGuid = UCase(Left(Item,38))
    If InScope(sGuid) Then
    If CheckDelete(sGuid) Then RegDeleteKey HKLM, sSubKeyName & Item
    End If 'InScope
    End If 'Len(Item)>37
    
    'Config entries
    sCurKey = sSubKeyName & Item & ""
    fSystemComponent0 = Not (RegReadValue(HKLM,sCurKey,"SystemComponent",sValue,"REG_DWORD") AND (sValue = "1"))
    fPackages = RegReadValue(HKLM,sCurKey,OPACKAGE,sValue,"REG_MULTI_SZ")
    fDisplayVersion = RegReadValue(HKLM,sCurKey,"DisplayVersion",sValue,"REG_SZ")
    If fDisplayVersion AND Len(sValue) > 1 Then
    fDisplayVersion = (Left(sValue,2) = OVERSIONMAJOR)
    End If
    If (fSystemComponent0 AND fPackages AND fDisplayVersion) Then
    fKeep = False
    If Not fRemoveAll Then
    For Each Sku in dicKeepSku.Keys
    If UCase(Item) =  OREGREF & Sku Then
    fkeep = True
    Exit For
    End If
    Next 'Sku
    End If
    If Not fkeep Then RegDeleteKey HKLM, sSubKeyName & Item
    End If
    Next 'Item
    End If 'RegEnumKey
    
    End Sub 'RegWipeARP
    '=======================================================================================================
    
    'Clean up temporary registry keys
    Sub TmpKeyCleanUp
    Dim TmpKey
    
    If fLogInitialized Then Log " - temporary OffScrub registry entries"
    If IsArray(arrTmpSKUs) Then
    For Each TmpKey in arrTmpSKUs
    oReg.DeleteKey HKLM, REG_ARP & TmpKey
    Next 'Item
    End If 'IsArray
    End Sub 'TmpKeyCleanUp
    
    '=======================================================================================================
    ' Helper Functions
    '=======================================================================================================
    
    'Create a log with the results of the SKU detection
    Sub LogSkuResults
    Dim SkuLog, SkuKey , p
    
    On Error Resume Next 'Don't fail on logging
    
    Set SkuLog = oFso.OpenTextFile(sScrubDir & "SkuLog.txt",FOR_WRITING,True,True)
    
    SkuLog.WriteLine "Installed SKUs (All):"
    SkuLog.WriteLine "====================="
    For Each SkuKey in dicInstalledSku.Keys
    SkuLog.WriteLine " - " & SkuKey
    Next 'Key
    
    SkuLog.WriteLine vbCrLf & "Server SKUs:"
    SkuLog.WriteLine          "============"
    For Each SkuKey in dicSrv.Keys
    SkuLog.WriteLine " - " & SkuKey
    Next 'Key
    
    SkuLog.WriteLine vbCrLf & "Client Suite SKUs:"
    SkuLog.WriteLine          "=================="
    For Each SkuKey in dicCSuite.Keys
    SkuLog.WriteLine " - " & SkuKey
    Next 'Key
    
    SkuLog.WriteLine vbCrLf & "Client Standalone SKUs:"
    SkuLog.WriteLine          "======================="
    For Each SkuKey in dicCSingle.Keys
    SkuLog.WriteLine " - " & SkuKey
    Next 'Key
    
    SkuLog.WriteLine vbCrLf & "Installed Products (All):"
    SkuLog.WriteLine          "========================="
    For Each p in oMsi.Products
    If InScope(p) Then
    SkuLog.Write " - " & p & " - "
    SkuLog.Write oMsi.ProductInfo(p, "ProductName")
    SkuLog.WriteLine " "
    End If
    Next 'Product
    
    SkuLog.WriteLine vbCrLf & "***************************************************************************************************" & vbCrLf
    
    SkuLog.WriteLine vbCrLf & "SKUs to keep:"
    SkuLog.WriteLine          "============="
    For Each SkuKey in dicKeepSku.Keys
    SkuLog.WriteLine " - " & SkuKey
    Next 'Key
    
    SkuLog.WriteLine vbCrLf & "Products to keep:"
    SkuLog.WriteLine          "================="
    For Each p in dicKeepProd.Keys
    SkuLog.Write " - " & p & " - "
    SkuLog.Write oMsi.ProductInfo(p, "ProductName")
    SkuLog.WriteLine " "
    Next 'Key
    
    SkuLog.WriteLine vbCrLf & "***************************************************************************************************" & vbCrLf
    
    SkuLog.WriteLine vbCrLf & "SKUs to remove:"
    SkuLog.WriteLine          "==============="
    For Each SkuKey in dicRemoveSku.Keys
    SkuLog.WriteLine " - " & SkuKey
    Next 'Key
    
    SkuLog.WriteLine vbCrLf & "Products to remove:"
    SkuLog.WriteLine          "==================="
    For Each p in oMsi.Products
    If InScope(p) Then
    If (fRemoveAll OR CheckDelete(p))Then
    SkuLog.Write " - " & p & " - "
    SkuLog.Write oMsi.ProductInfo(p, "ProductName")
    SkuLog.WriteLine " "
    End If
    End If 'InScope
    Next 'Product
    
    SkuLog.Close
    Set SkuLog = Nothing
    
    End Sub 'LogSkuResults
    '=======================================================================================================
    
    'End all running instances of applications that will be removed
    Sub CloseOfficeApps
    Dim Processes, Process, prop
    Dim fWait
    Dim iRet
    
    On Error Resume Next
    
    fWait = False
    Log " Doing Action: CloseOfficeApps"
    
    Set Processes = oWmiLocal.ExecQuery("Select * From Win32_Process")
    For Each Process in Processes
    If dicApps.Exists(LCase(Process.Name)) Then
    Log " - End process " & Process.Name
    iRet = Process.Terminate()
    CheckError "CloseOfficeApps: " & "Process.Name"
    Else
    For Each prop in Process.Properties_
    If prop.Name = "ExecutablePath" Then 
    If InStr(UCase(prop.Value), UCase(sOInstallRoot)) > 0 Then
    Log = " - End process '" & Process.Name
    iRet = Process.Terminate()
    CheckError "CloseOfficeApps: " & "Process.Name"
    fWait = True
    End If 
    End If 'ExcecutablePath
    Next 'prop
    End If
    Next 'Process
    If fWait Then
    wscript.sleep 10000
    End If
    LogOnly " End Action: CloseOfficeApps"
    End Sub 'CloseOfficeApps
    '=======================================================================================================
    
    'Ensure Windows Explorer is restarted if needed
    Sub RestoreExplorer
    Dim Processes, Result, oAT, DateTime, JobID
    Dim sCmd
    
    'Non critical routine. Don't fail on error
    On Error Resume Next
    wscript.sleep 1000
    Set Processes = oWmiLocal.ExecQuery("Select * From Win32_Process Where Name='explorer.exe'")
    If Processes.Count < 1 Then 
    oWShell.Run "explorer.exe"
    'To handle this in case of System context, schedule and run as interactive task
    If iVersionNT > 502 Then
    'Vista and later
    oWShell.Run "SCHTASKS /Create /TN OffScrEx /TR explorer /SC ONCE /ST 12:00 /IT",0,True
    oWShell.Run "SCHTASKS /Run /TN OffScrEx", 0, True
    oWShell.Run "SCHTASKS /Delete /TN OffScrEx /F", 0, False
    Else
    Set oAT = oWmiLocal.Get("Win32_ScheduledJob")
    Set DateTime = CreateObject("WbemScripting.SWbemDateTime")
    DateTime.SetVarDate DateAdd("n",1,Now),True
    Result = oAT.Create("explorer.exe", DateTime.Value, , , , True, JobID)
    End If 'iVersionNT
    End If
    End Sub 'RestoreExploer
    '=======================================================================================================
    
    'Returns the delimiter for a passed in string
    Function Delimiter (sVersion)
    
    Dim iCnt, iAsc
    
    Delimiter = " "
    For iCnt = 1 To Len(sVersion)
    iAsc = Asc(Mid(sVersion, iCnt, 1))
    If Not (iASC >= 48 And iASC <= 57) Then 
    Delimiter = Mid(sVersion, iCnt, 1)
    Exit Function
    End If
    Next 'iCnt
    End Function
    '=======================================================================================================
    
    'Check registry access permissions. Failure will terminate the script
    Function CheckRegPermissions
    Const KEY_QUERY_VALUE       = &H0001
    Const KEY_SET_VALUE         = &H0002
    Const KEY_CREATE_SUB_KEY    = &H0004
    Const DELETE                = &H00010000
    
    Dim sSubKeyName
    Dim fReturn
    
    CheckRegPermissions = True
    sSubKeyName = "SoftwareMicrosoftWindows"
    oReg.CheckAccess HKLM, sSubKeyName, KEY_QUERY_VALUE, fReturn
    If Not fReturn Then CheckRegPermissions = False
    oReg.CheckAccess HKLM, sSubKeyName, KEY_SET_VALUE, fReturn
    If Not fReturn Then CheckRegPermissions = False
    oReg.CheckAccess HKLM, sSubKeyName, KEY_CREATE_SUB_KEY, fReturn
    If Not fReturn Then CheckRegPermissions = False
    oReg.CheckAccess HKLM, sSubKeyName, DELETE, fReturn
    If Not fReturn Then CheckRegPermissions = False
    
    End Function 'CheckRegPermissions
    '=======================================================================================================
    
    'Check if an Office product is still registered with a SKU that stays on the computer
    Function CheckDelete(sProductCode)
    
    'Ensure valid GUID length
    If NOT Len(sProductCode) = 38 Then
    CheckDelete = False
    Exit Function
    End If
    
    'If it's a non Office ProductCode exit with false right away
    CheckDelete = InScope(sProductCode)
    If Not CheckDelete Then Exit Function
    If dicKeepProd.Exists(UCase(sProductCode)) Then CheckDelete = False
    
    End Function 'CheckDelete
    '=======================================================================================================
    
    'Check if ProductCode is in scope
    Function InScope(sProductCode)
    
    Dim fInScope
    Dim sProd
    
    fInScope = False
    If Len(sProductCode) = 38 Then
    sProd = UCase(sProductCode)
    Select Case OVERSIONMAJOR
    Case "11"
    If Right(sProd,PRODLEN)=OFFICEID Then InScope = True
    Case "12"
    If Right(sProd,PRODLEN)=OFFICEID AND Mid(sProd,4,2) = OVERSIONMAJOR Then fInScope = True
    Case "14"
    If Right(sProd,PRODLEN)=OFFICEID AND Mid(sProd,4,2) = OVERSIONMAJOR Then fInScope = True
    Case "15"
    If Right(sProd,PRODLEN)=OFFICEID AND Mid(sProd,4,2) = OVERSIONMAJOR Then 
    Select Case Mid(sProd, 11, 4)
    Case "007E", "008F", "008C"
    ' C2R products - keep them
    Case Else
    fInScope = True
    End Select
    End If
    Case Else
    End Select
    End If '38
    
    InScope = fInScope
    End Function 'InScope
    '=======================================================================================================
    
    'Register an orphaned .msi product as installed for MSI
    Sub MsiRegisterProduct (sMsiFile)
    
    Dim sDisplayVersion, sCurKey, sDisplayName, sLang, sProductCode, sTmpKey
    Dim iCnt
    
    'Create a temporary keys to simulate an installed product
    sProductCode = ""
    sProductCode = GetMsiProductCode(sMsiFile)
    sDisplayVersion = GetMsiProductVersion(sMsiFile)
    If sDisplayVersion = "" Then sDisplayVersion = OVERSION & ".0000.0000"
    sDisplayName = GetMsiProductName(sMsiFile)
    If sDisplayName = "" Then sDisplayName = sProductCode
    Select Case OVERSIONMAJOR
    Case "9","10","11"
    sLang = CInt("&h" & Mid(sProductCode,6,4))
    Case "12","14"
    sLang = CInt("&h" & Mid(sProductCode,16,4))
    Case Else
    End Select
    
    For iCnt = 1 To 3
    Select Case iCnt
    Case 1
    sCurKey = REG_ARP & sProductCode
    oReg.CreateKey HKLM,sCurKey
    Case 2
    sCurKey = "SOFTWAREMicrosoftWindowsCurrentVersionInstallerUserDataS-1-5-18Products" & GetCompressedGuid(sProductCode)
    oReg.CreateKey HKLM,sCurKey
    oReg.CreateKey HKLM,sCurKey & "Features"
    oReg.CreateKey HKLM,sCurKey & "InstallProperties"
    oReg.CreateKey HKLM,sCurKey & "Patches"
    oReg.CreateKey HKLM,sCurKey & "Usage"
    sCurKey = sCurKey & "InstallProperties"
    oReg.SetStringValue HKLM,sCurKey,"LocalPackage",sMsiFile
    Case 3
    sCurKey = "InstallerProducts" & GetCompressedGuid(sProductCode)
    sTmpKey = sCurKey
    oReg.CreateKey HKCR,sCurKey
    oReg.SetDWordValue HKCR,sCurKey,"AdvertiseFlags",388
    oReg.SetDWordValue HKCR,sCurKey,"Assignment",1
    oReg.SetDWordValue HKCR,sCurKey,"AuthorizedLUAApp",0
    oReg.SetStringValue HKCR,sCurKey,"Clients",":"
    oReg.SetDWordValue HKCR,sCurKey,"DeploymentFlags",3
    oReg.SetDWordValue HKCR,sCurKey,"InstanceType",0
    oReg.SetDWordValue HKCR,sCurKey,"Language",sLang
    oReg.SetStringValue HKCR,sCurKey,"PackageCode",GetMsiPackageCode(sMsiFile)
    oReg.SetStringValue HKCR,sCurKey,"ProductName",sDisplayName
    oReg.SetDWordValue HKCR,sCurKey,"VersionMinor",0
    sCurKey = sTmpKey & "SourceList"
    oReg.CreateKey HKCR,sCurKey
    oReg.SetExpandedStringValue HKCR,sCurKey,"LastUsedSource",sScrubDir
    oReg.SetStringValue HKCR,sCurKey,"PackageName",Mid(sMsiFile,InstrRev(sMsiFile,"")+1)
    sCurKey = sTmpKey & "SourceListMedia"
    oReg.CreateKey HKCR,sCurKey
    oReg.SetStringValue HKCR,sCurKey,"1",OREF & ";1"
    oReg.SetStringValue HKCR,sCurKey,"DiskPrompt",sDisplayName
    sCurKey = sTmpKey & "SourceListNet"
    oReg.CreateKey HKCR,sCurKey
    oReg.SetExpandedStringValue HKCR,sCurKey,"1",sScrubDir
    
    Case Else
    End Select
    If iCnt <3 Then
    oReg.SetStringValue HKLM,sCurKey,"Comments",""
    oReg.SetStringValue HKLM,sCurKey,"Contact",""
    oReg.SetStringValue HKLM,sCurKey,"DisplayName",sDisplayName
    oReg.SetStringValue HKLM,sCurKey,"DisplayVersion",sDisplayVersion
    oReg.SetDWordValue HKLM,sCurKey,"EstimatedSize",0
    oReg.SetStringValue HKLM,sCurKey,"HelpLink",""
    oReg.SetStringValue HKLM,sCurKey,"HelpTelephone",""
    oReg.SetStringValue HKLM,sCurKey,"InstallDate","20100101"
    If f64 Then
    oReg.SetStringValue HKLM,sCurKey,"InstallLocation",sProgramFilesX86
    Else
    oReg.SetStringValue HKLM,sCurKey,"InstallLocation",sProgramFiles
    End If
    oReg.SetStringValue HKLM,sCurKey,"InstallSource",sScrubDir
    oReg.SetDWordValue HKLM,sCurKey,"Language",sLang
    oReg.SetExpandedStringValue HKLM,sCurKey,"ModifyPath","MsiExec.exe /X" & sProductCode
    oReg.SetDWordValue HKLM,sCurKey,"NoModify",1
    oReg.SetStringValue HKLM,sCurKey,"Publisher","Microsoft Corporation"
    oReg.SetStringValue HKLM,sCurKey,"Readme",""
    oReg.SetStringValue HKLM,sCurKey,"Size",""
    oReg.SetDWordValue HKLM,sCurKey,"SystemComponent",0
    oReg.SetExpandedStringValue HKLM,sCurKey,"UninstallString","MsiExec.exe /X" & sProductCode
    oReg.SetStringValue HKLM,sCurKey,"URLInfoAbout",""
    oReg.SetStringValue HKLM,sCurKey,"URLUpdateInfo",""
    oReg.SetDWordValue HKLM,sCurKey,"Version",0
    oReg.SetDWordValue HKLM,sCurKey,"VersionMajor",OVERSIONMAJOR
    oReg.SetDWordValue HKLM,sCurKey,"VersionMinor",0
    oReg.SetDWordValue HKLM,sCurKey,"WindowsInstaller",1
    End If '< 3
    Next 'iCnt
    
    End Sub 'MsiRegisterProduct
    '=======================================================================================================
    
    'Obtain the ProductCode (GUID) from a .msi package
    'The function will open the .msi database and query the 'Property' table to retrieve the ProductCode
    Function GetMsiProductCode(sMsiFile)
    
    Dim MsiDb,Record
    Dim qView
    
    On Error Resume Next
    
    GetMsiProductCode = ""
    Set Record = Nothing
    
    Set MsiDb = oMsi.OpenDatabase(sMsiFile,MSIOPENDATABASEREADONLY)
    Set qView = MsiDb.OpenView("SELECT `Value` FROM Property WHERE `Property` = 'ProductCode'")
    qView.Execute
    Set Record = qView.Fetch
    GetMsiProductCode = Record.StringData(1)
    qView.Close
    
    End Function 'GetMsiProductCode
    '=======================================================================================================
    
    'Obtain the ProductVersion from a .msi package
    'The function will open the .msi database and query the 'Property' table to retrieve the ProductCode
    Function GetMsiProductVersion(sMsiFile)
    
    Dim MsiDb,Record
    Dim qView
    
    On Error Resume Next
    
    GetMsiProductVersion = ""
    Set Record = Nothing
    
    Set MsiDb = oMsi.OpenDatabase(sMsiFile,MSIOPENDATABASEREADONLY)
    Set qView = MsiDb.OpenView("SELECT `Value` FROM Property WHERE `Property` = 'ProductVersion'")
    qView.Execute
    Set Record = qView.Fetch
    GetMsiProductVersion = Record.StringData(1)
    qView.Close
    
    End Function 'GetMsiProductVersion
    '=======================================================================================================
    
    'Obtain the ProductVersion from a .msi package
    'The function will open the .msi database and query the 'Property' table to retrieve the ProductCode
    Function GetMsiProductName(sMsiFile)
    
    Dim MsiDb,Record
    Dim qView
    
    On Error Resume Next
    
    GetMsiProductName = ""
    Set Record = Nothing
    
    Set MsiDb = oMsi.OpenDatabase(sMsiFile,MSIOPENDATABASEREADONLY)
    Set qView = MsiDb.OpenView("SELECT `Value` FROM Property WHERE `Property` = 'ProductName'")
    qView.Execute
    Set Record = qView.Fetch
    GetMsiProductName = Record.StringData(1)
    qView.Close
    
    End Function 'GetMsiProductVersion
    '=======================================================================================================
    
    'Obtain the PackageCode (GUID) from a .msi package
    'The function will the .msi'S SummaryInformation stream
    Function GetMsiPackageCode(sMsiFile)
    
    On Error Resume Next
    
    Const PID_REVNUMBER = 9
    
    GetMsiPackageCode = ""
    GetMsiPackageCode = GetCompressedGuid(oMsi.SummaryInformation(sMsiFile,MSIOPENDATABASEREADONLY).Property(PID_REVNUMBER))
    
    End Function 'GetMsiPackageCode
    '=======================================================================================================
    
    'Returns a string with a list of ProductCodes from the summary information stream
    Function MspTargets (sMspFile)
    Const MSIOPENDATABASEMODE_PATCHFILE = 32
    Const PID_TEMPLATE                  =  7
    
    Dim Msp
    'Non critical routine. Don't fail on error
    On Error Resume Next
    MspTargets = ""
    If oFso.FileExists(sMspFile) Then
    Set Msp = Msi.OpenDatabase(WScript.Arguments(0),MSIOPENDATABASEMODE_PATCHFILE)
    If Err = 0 Then MspTargets = Msp.SummaryInformation.Property(PID_TEMPLATE)
    End If 'oFso.FileExists(sMspFile)
    End Function 'MspTargets
    '=======================================================================================================
    
    'Return the ProductCode {GUID} from a .MSI package
    Function ProductCode(sMsi)
    Const MSIUILEVELNONE = 2 'No UI
    Dim MsiSession
    
    On Error Resume Next
    'Non critical routine. Don't fail on error
    If oFso.FileExists(sMsi) Then
    oMsi.UILevel = MSIUILEVELNONE
    Set MsiSession = oMsi.OpenPackage(sMsi,1)
    ProductCode = MsiSession.ProductProperty("ProductCode")
    Set MsiSession = Nothing
    Else
    ProductCode = ""
    End If 'oFso.FileExists(sMsi)
    End Function 'ProductCode
    '=======================================================================================================
    
    Function GetExpandedGuid (sGuid)
    Dim i
    
    'Ensure valid length
    If NOT Len(sGuid) = 32 Then Exit Function
    
    GetExpandedGuid = "{" & StrReverse(Mid(sGuid,1,8)) & "-" & _
    StrReverse(Mid(sGuid,9,4)) & "-" & _
    StrReverse(Mid(sGuid,13,4))& "-"
    For i = 17 To 20
        If i Mod 2 Then
        GetExpandedGuid = GetExpandedGuid & mid(sGuid,(i + 1),1)
        Else
        GetExpandedGuid = GetExpandedGuid & mid(sGuid,(i - 1),1)
        End If
    Next
    GetExpandedGuid = GetExpandedGuid & "-"
    For i = 21 To 32
        If i Mod 2 Then
        GetExpandedGuid = GetExpandedGuid & mid(sGuid,(i + 1),1)
        Else
        GetExpandedGuid = GetExpandedGuid & mid(sGuid,(i - 1),1)
        End If
    Next
    GetExpandedGuid = GetExpandedGuid & "}"
    End Function
    '=======================================================================================================
    
    'Converts a GUID into the compressed format
    Function GetCompressedGuid (sGuid)
    Dim sCompGUID
    Dim i
    
    'Ensure Valid Length
    If NOT Len(sGuid) = 38 Then Exit Function
    
    sCompGUID = StrReverse(Mid(sGuid,2,8))  & _
    StrReverse(Mid(sGuid,11,4)) & _
    StrReverse(Mid(sGuid,16,4)) 
    For i = 21 To 24
        If i Mod 2 Then
        sCompGUID = sCompGUID & Mid(sGuid, (i + 1), 1)
        Else
        sCompGUID = sCompGUID & Mid(sGuid, (i - 1), 1)
        End If
    Next
    For i = 26 To 37
        If i Mod 2 Then
        sCompGUID = sCompGUID & Mid(sGuid, (i - 1), 1)
        Else
        sCompGUID = sCompGUID & Mid(sGuid, (i + 1), 1)
        End If
    Next
    GetCompressedGuid = sCompGUID
    End Function
    '=======================================================================================================
    
    'Unsquish GUID
    Function GetDecodedGuid(sEncGuid, sGuid)
    
    Dim sDecode, sTable, sHex, iChr
    Dim arrTable
    Dim i, iAsc, pow85, decChar
    Dim lTotal
    Dim fFailed
    
    fFailed = False
    
    sTable =    "0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff," & _
    "0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff," & _
    "0xff,0x00,0xff,0xff,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0xff," & _
    "0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0xff,0xff,0xff,0x16,0xff,0x17," & _
    "0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27," & _
    "0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0xff,0x34,0x35,0x36," & _
    "0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46," & _
    "0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0xff,0x53,0x54,0xff"
    arrTable = Split(sTable,",")
    lTotal = 0 : pow85 = 1
    For i = 0 To 19
    fFailed = True
    If i Mod 5 = 0 Then
    lTotal = 0 : pow85 = 1
    End If ' i Mod 5 = 0
    iAsc = Asc(Mid(sEncGuid,i+1,1))
    sHex = arrTable(iAsc)
    If iAsc >=128 Then Exit For
    If sHex = "0xff" Then Exit For
    iChr = CInt("&h"&Right(sHex,2))
    lTotal = lTotal + (iChr * pow85)
    If i Mod 5 = 4 Then sDecode = sDecode & DecToHex(lTotal)
    pow85 = pow85 * 85
    fFailed = False
    Next 'i
    If NOT fFailed Then sGuid = "{"&Mid(sDecode,1,8)&"-"& _
    Mid(sDecode,13,4)&"-"& _
    Mid(sDecode,9,4)&"-"& _
    Mid(sDecode,23,2) & Mid(sDecode,21,2)&"-"& _
    Mid(sDecode,19,2) & Mid(sDecode,17,2) & Mid(sDecode,31,2) & Mid(sDecode,29,2) & Mid(sDecode,27,2) & Mid(sDecode,25,2) &"}"
    
    GetDecodedGuid = NOT fFailed
    
    End Function 'GetDecodedGuid
    '=======================================================================================================
    
    'Convert a long decimal to hex
    Function DecToHex(lDec)
    
    Dim sHex
    Dim iLen
    Dim lVal, lExp
    Dim arrChr
    
    arrChr = Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F")
    sHex = ""
    lVal = lDec
    lExp = 16^10
    While lExp >= 1
    If lVal >= lExp Then
    sHex = sHex & arrChr(Int(lVal / lExp))
    lVal = lVal - lExp * Int(lVal / lExp)
    Else
    sHex = sHex & "0"
    If sHex = "0" Then sHex = ""
    End If
    lExp = lExp / 16
    Wend
    
    iLen = 8 - Len(sHex)
    If iLen > 0 Then sHex = String(iLen,"0") & sHex
    DecToHex = sHex
    End Function
    '=======================================================================================================
    
    'Ensures that only valid metadata entries exist to avoid API failures
    Sub EnsureValidWIMetadata (hDefKey,sKey,iValidLength)
    
    Dim arrKeys
    Dim SubKey
    
    If Len(sKey) > 1 Then
    If Right(sKey,1) = "" Then sKey = Left(sKey,Len(sKey)-1)
    End If
    
    If RegEnumKey(hDefKey,sKey,arrKeys) Then
    For Each SubKey in arrKeys
    If NOT Len(SubKey) = iValidLength Then
    RegDeleteKey hDefKey,sKey & "" & SubKey & ""
    End If
    Next 'SubKey
    End If
    
    End Sub 'EnsureValidWIMetadata
    '=======================================================================================================
    
    'Create a backup copy of the file in the ScrubDir then delete the file
    Sub CopyAndDeleteFile(sFile)
    Dim File
    
    'Error handling inlined
    On Error Resume Next
    If oFso.FileExists(sFile) Then
    Set File = oFso.GetFile(sFile)
    If Not oFso.FolderExists(sScrubDir & "" & File.ParentFolder.Name) Then oFso.CreateFolder sScrubDir & "" & File.ParentFolder.Name
    If Not fDetectOnly Then
    LogOnly " - Backing up file: " & sFile
    oFso.CopyFile sFile,sScrubDir & "" & File.ParentFolder.Name & "" & File.Name,True : CheckError "CopyAndDeleteFile"
    Set File = Nothing
    DeleteFile(sFile)
    Else
    LogOnly " - Simulate CopyAndDelete file: " & sFile
    End If
    End If 'oFso.FileExists
    End Sub 'CopyAndDeleteFile
    '=======================================================================================================
    
    'Wrapper to delete a file
    Sub DeleteFile(sFile)
    Dim File
    Dim sFileName, sNewPath
    
    On Error Resume Next
    
    If dicKeepFolder.Exists(LCase(sFile)) Then
    If NOT fForce Then
    LogOnly " - Disallowing the delete of still required keypath element: " & sFile
    Exit Sub
    Else
    LogOnly " - Enforced delete of still required keypath element: " & sFile
    LogOnly "   Remaining applications will need a repair!"
    End If
    End If
    If f64 Then
    If dicKeepFolder.Exists(LCase(Wow64Folder(sFile))) Then
    If NOT fForce Then
    LogOnly " - Disallowing the delete of still required keypath element: " & sFile
    Exit Sub
    Else
    LogOnly " - Enforced delete of still required keypath element: " & sFile
    LogOnly "   Remaining applications will need a repair!"
    End If
    End If
    End If
    
    If oFso.FileExists(sFile) Then
    LogOnly " - Delete file: " & sFile
    If Not fDetectOnly Then oFso.DeleteFile sFile,True
    If Err <> 0 Then
    CheckError "DeleteFile"
    If fForce Then
    'Try to move the file and delete from there
    Set File = oFso.GetFile(sFile)
    sFileName = File.Name
    sNewPath = sScrubDir & "ScrubTmp"
    Set File = Nothing
    If Not oFso.FolderExists(sNewPath) Then oFso.CreateFolder(sNewPath)
    'Move the file
    LogOnly " - Move file to: " & sNewPath & "" & sFileName
    oFso.MoveFile sFile,sNewPath & "" & sFileName
    If Err <> 0 Then 
    CheckError "DeleteFile (move)"
    End If 'Err <> 0
    Else
    fRebootRequired = True
    End If 'fForce
    End If 'Err <> 0
    End If 'oFso.FileExists
    End Sub 'DeleteFile
    '=======================================================================================================
    
    '64 bit aware wrapper to return the requested folder 
    Function GetFolderPath(sPath)
    GetFolderPath = True
    If oFso.FolderExists(sPath) Then Exit Function
    If f64 AND oFso.FolderExists(Wow64Folder(sPath)) Then
    sPath = Wow64Folder(sPath)
    Exit Function
    End If
    GetFolderPath = False
    End Function 'GetFolderPath
    '=======================================================================================================
    
    'Enumerates subfolder names of a folder and returns True if subfolders exist
    Function EnumFolderNames (sFolder, arrSubFolders)
    Dim Folder, Subfolder
    Dim sSubFolders
    
    If oFso.FolderExists(sFolder) Then
    Set Folder = oFso.GetFolder(sFolder)
    For Each Subfolder in Folder.Subfolders
    sSubFolders = sSubFolders & Subfolder.Name & ","
    Next 'Subfolder
    End If
    If f64 AND oFso.FolderExists(Wow64Folder(sFolder)) Then
    Set Folder = oFso.GetFolder(Wow64Folder(sFolder))
    For Each Subfolder in Folder.Subfolders
    sSubFolders = sSubFolders & Subfolder.Name & ","
    Next 'Subfolder
    End If
    If Len(sSubFolders)>0 Then arrSubFolders = RemoveDuplicates(Split(Left(sSubFolders,Len(sSubFolders)-1),","))
    EnumFolderNames = Len(sSubFolders)>0
    End Function 'EnumFolderNames
    '=======================================================================================================
    
    'Enumerates subfolders of a folder and returns True if subfolders exist
    Function EnumFolders (sFolder, arrSubFolders)
    Dim Folder, Subfolder
    Dim sSubFolders
    
    If oFso.FolderExists(sFolder) Then
    Set Folder = oFso.GetFolder(sFolder)
    For Each Subfolder in Folder.Subfolders
    sSubFolders = sSubFolders & Subfolder.Path & ","
    Next 'Subfolder
    End If
    If f64 AND oFso.FolderExists(Wow64Folder(sFolder)) Then
    Set Folder = oFso.GetFolder(Wow64Folder(sFolder))
    For Each Subfolder in Folder.Subfolders
    sSubFolders = sSubFolders & Subfolder.Path & ","
    Next 'Subfolder
    End If
    If Len(sSubFolders)>0 Then arrSubFolders = RemoveDuplicates(Split(Left(sSubFolders,Len(sSubFolders)-1),","))
    EnumFolders = Len(sSubFolders)>0
    End Function 'EnumFolders
    '=======================================================================================================
    
    Sub GetMseFolderStructure (Folder)
    Dim SubFolder
    
    For Each SubFolder in Folder.SubFolders
    ReDim Preserve arrMseFolders(UBound(arrMseFolders)+1)
    arrMseFolders(UBound(arrMseFolders)) = SubFolder.Path
    GetMseFolderStructure SubFolder
    Next 'SubFolder
    End Sub 'GetMseFolderStructure
    '=======================================================================================================
    
    'Wrapper to delete a folder 
    Sub DeleteFolder(sFolder)
    Dim Folder
    Dim sDelFolder, sFolderName, sNewPath
    
    'Ensure trailing ""
    sFolder = sFolder & ""
    While InStr(sFolder,"\")>0
    sFolder = Replace(sFolder,"\","")
    Wend
    
    If dicKeepFolder.Exists(LCase(sFolder)) Then
    If NOT fForce Then
    LogOnly " - Disallowing the delete of still required keypath element: " & sFolder
    Exit Sub
    Else
    LogOnly " - Enforced delete of still required keypath element: " & sFolder
    LogOnly "   Remaining applications will need a repair!"
    End If
    End If
    If f64 Then
    If dicKeepFolder.Exists(LCase(Wow64Folder(sFolder))) Then
    If NOT fForce Then
    LogOnly " - Disallowing the delete of still required keypath element: " & sFolder
    Exit Sub
    Else
    LogOnly " - Enforced delete of still required keypath element: " & sFolder
    LogOnly "   Remaining applications will need a repair!"
    End If
    End If
    End If
    
    'Strip trailing ""
    If Len(sFolder) > 1 Then
    sFolder = Left(sFolder,Len(sFolder)-1)
    End If
    
    On Error Resume Next
    If oFso.FolderExists(sFolder) Then 
    sDelFolder = sFolder
    ElseIf f64 AND oFso.FolderExists(Wow64Folder(sFolder)) Then 
    sDelFolder = Wow64Folder(sFolder)
    Else
    Exit Sub
    End If
    If Not fDetectOnly Then 
    LogOnly " - Delete folder: " & sDelFolder
    oFso.DeleteFolder sDelFolder,True
    Else
    LogOnly " - Simulate delete folder: " & sDelFolder
    End If
    If Err <> 0 Then
    CheckError "DeleteFolder"
    'Try to move the folder and delete from there
    Set Folder = oFso.GetFolder(sDelFolder)
    sFolderName = Folder.Name
    sNewPath = sScrubDir & "ScrubTmp"
    Set Folder = Nothing
    'Ensure we stay within the same drive
    If Not oFso.FolderExists(sNewPath) Then oFso.CreateFolder(sNewPath)
    'Move the folder
    LogOnly " - Moving folder to: " & sNewPath & "" & sFolderName
    oFso.MoveFolder sFolder,sNewPath & "" & sFolderName
    If Err <> 0 Then
    CheckError "DeleteFolder (move)"
    End If 'Err <> 0
    End If 'Err <> 0
    End Sub 'DeleteFolder
    '=======================================================================================================
    
    'Delete empty folder structures
    Sub DeleteEmptyFolders
    Dim Folder
    Dim sFolder
    
    ' cosmetic' task don't fail on error
    On Error Resume Next
    If Not IsArray(arrDeleteFolders) Then Exit Sub
    Log vbCrLf & "Empty Folder Cleanup"
    For Each sFolder in arrDeleteFolders
    If oFso.FolderExists(sFolder) Then
    Set Folder = oFso.GetFolder(sFolder)
    If CBool(Folder.Attributes AND 1024) Then
    'exclude protected folder
    Else
    If (Folder.Subfolders.Count = 0) AND (Folder.Files.Count = 0) Then 
    Set Folder = Nothing
    SmartDeleteFolder sFolder
    End If
    End If
    End If
    Next 'sFolder
    CheckError "DeleteEmptyFolders"
    On Error Goto 0
    End Sub 'DeleteEmptyFolders
    '=======================================================================================================
    
    'Wrapper to delete a folder and remove the empty parent folder structure
    Sub SmartDeleteFolder(sFolder)
    If oFso.FolderExists(sFolder) Then 
    If Not fDetectOnly Then
    LogOnly "  Request SmartDelete for folder: " & sFolder
    SmartDeleteFolderEx sFolder
    Else
    LogOnly "  Simulate request SmartDelete for folder: " & sFolder
    End If
    End If
    If f64 AND oFso.FolderExists(Wow64Folder(sFolder)) Then 
    If Not fDetectOnly Then 
    LogOnly "Request SmartDelete for folder: " & Wow64Folder(sFolder)
    SmartDeleteFolderEx Wow64Folder(sFolder)
    Else
    LogOnly "Simulate request SmartDelete for folder: " & Wow64Folder(sFolder)
    End If
    End If
    End Sub 'SmartDeleteFolder
    '=======================================================================================================
    
    'Executes the folder delete operation
    Sub SmartDeleteFolderEx(sFolder)
    Dim Folder
    
    On Error Resume Next
    DeleteFolder sFolder : CheckError "SmartDeleteFolderEx"
    On Error Goto 0
    Set Folder = oFso.GetFolder(oFso.GetParentFolderName(sFolder))
    If (Folder.Subfolders.Count = 0) AND (Folder.Files.Count = 0) Then SmartDeleteFolderEx(Folder.Path)
    End Sub 'SmartDeleteFolderEx
    '=======================================================================================================
    
    'Adds the folder structure to the 'KeepFolder' dictionary
    Sub AddKeepFolder(sPath)
    
    Dim Folder
    
    'Ensure trailing ""
    sPath = LCase(sPath) & ""
    While InStr(sPath,"\")>0
    sPath = Replace(sPath,"\","")
    Wend
    
    If NOT dicKeepFolder.Exists (sPath) Then
    dicKeepFolder.Add sPath,sPath
    Else
    Exit Sub
    End If
    sPath = LCase(oFso.GetParentFolderName(sPath)) & ""
    If oFso.FolderExists(sPath) Then AddKeepFolder(sPath)
    End Sub
    '=======================================================================================================
    
    'Handles additional folder-path operations on 64 bit environments
    Function Wow64Folder(sFolder)
    If LCase(Left(sFolder,Len(sWinDir & "System32"))) = LCase(sWinDir & "System32") Then 
    Wow64Folder = sWinDir & "syswow64" & Right(sFolder,Len(sFolder)-Len(sSys32Dir))
    ElseIf LCase(Left(sFolder,Len(sProgramFiles))) = LCase(sProgramFiles) Then 
    Wow64Folder = sProgramFilesX86 & Right(sFolder,Len(sFolder)-Len(sProgramFiles))
    Else
    Wow64Folder = "?" 'Return invalid string to ensure the folder cannot exist
    End If
    End Function 'Wow64Folder
    '=======================================================================================================
    
    Function HiveString(hDefKey)
    On Error Resume Next
    Select Case hDefKey
    Case HKCR : HiveString = "HKEY_CLASSES_ROOT"
    Case HKCU : HiveString = "HKEY_CURRENT_USER"
    Case HKLM : HiveString = "HKEY_LOCAL_MACHINE"
    Case HKU  : HiveString = "HKEY_USERS"
    Case Else : HiveString = hDefKey
    End Select
    End Function
    '=======================================================================================================
    
    Function RegKeyExists(hDefKey,sSubKeyName)
    Dim arrKeys
    RegKeyExists = False
    If oReg.EnumKey(hDefKey,sSubKeyName,arrKeys) = 0 Then RegKeyExists = True
    End Function
    '=======================================================================================================
    
    Function RegValExists(hDefKey,sSubKeyName,sName)
    Dim arrValueTypes, arrValueNames
    Dim i
    
    RegValExists = False
    If Not RegKeyExists(hDefKey,sSubKeyName) Then Exit Function
    If oReg.EnumValues(hDefKey,sSubKeyName,arrValueNames,arrValueTypes) = 0 AND IsArray(arrValueNames) Then
    For i = 0 To UBound(arrValueNames) 
    If LCase(arrValueNames(i)) = Trim(LCase(sName)) Then RegValExists = True
    Next 
    End If 'oReg.EnumValues
    End Function
    '=======================================================================================================
    
    'Read the value of a given registry entry
    Function RegReadValue(hDefKey, sSubKeyName, sName, sValue, sType)
    Dim RetVal
    Dim Item
    Dim arrValues
    
    Select Case UCase(sType)
    Case "1","REG_SZ"
    RetVal = oReg.GetStringValue(hDefKey,sSubKeyName,sName,sValue)
    If Not RetVal = 0 AND f64 Then RetVal = oReg.GetStringValue(hDefKey,Wow64Key(hDefKey, sSubKeyName),sName,sValue)
    
    Case "2","REG_EXPAND_SZ"
    RetVal = oReg.GetExpandedStringValue(hDefKey,sSubKeyName,sName,sValue)
    If Not RetVal = 0 AND f64 Then RetVal = oReg.GetExpandedStringValue(hDefKey,Wow64Key(hDefKey, sSubKeyName),sName,sValue)
    
    Case "7","REG_MULTI_SZ"
    RetVal = oReg.GetMultiStringValue(hDefKey,sSubKeyName,sName,arrValues)
    If Not RetVal = 0 AND f64 Then RetVal = oReg.GetMultiStringValue(hDefKey,Wow64Key(hDefKey, sSubKeyName),sName,arrValues)
    If RetVal = 0 Then sValue = Join(arrValues,chr(34))
    
    Case "4","REG_DWORD"
    RetVal = oReg.GetDWORDValue(hDefKey,sSubKeyName,sName,sValue)
    If Not RetVal = 0 AND f64 Then 
    RetVal = oReg.GetDWORDValue(hDefKey,Wow64Key(hDefKey, sSubKeyName),sName,sValue)
    End If
    
    Case "3","REG_BINARY"
    RetVal = oReg.GetBinaryValue(hDefKey,sSubKeyName,sName,sValue)
    If Not RetVal = 0 AND f64 Then RetVal = oReg.GetBinaryValue(hDefKey,Wow64Key(hDefKey, sSubKeyName),sName,sValue)
    
    Case "11","REG_QWORD"
    RetVal = oReg.GetQWORDValue(hDefKey,sSubKeyName,sName,sValue)
    If Not RetVal = 0 AND f64 Then RetVal = oReg.GetQWORDValue(hDefKey,Wow64Key(hDefKey, sSubKeyName),sName,sValue)
    
    Case Else
    RetVal = -1
    End Select 'sValue
    
    RegReadValue = (RetVal = 0)
    End Function 'RegReadValue
    '=======================================================================================================
    
    'Enumerate a registry key to return all values
    Function RegEnumValues(hDefKey,sSubKeyName,arrNames, arrTypes)
    Dim RetVal, RetVal64
    Dim arrNames32, arrNames64, arrTypes32, arrTypes64
    
    If f64 Then
    RetVal = oReg.EnumValues(hDefKey,sSubKeyName,arrNames32,arrTypes32)
    RetVal64 = oReg.EnumValues(hDefKey,Wow64Key(hDefKey, sSubKeyName),arrNames64,arrTypes64)
    If (RetVal = 0) AND (Not RetVal64 = 0) AND IsArray(arrNames32) AND IsArray(arrTypes32) Then 
    arrNames = arrNames32
    arrTypes = arrTypes32
    End If
    If (Not RetVal = 0) AND (RetVal64 = 0) AND IsArray(arrNames64) AND IsArray(arrTypes64) Then 
    arrNames = arrNames64
    arrTypes = arrTypes64
    End If
    If (RetVal = 0) AND (RetVal64 = 0) AND IsArray(arrNames32) AND IsArray(arrNames64) AND IsArray(arrTypes32) AND IsArray(arrTypes64) Then 
    arrNames = RemoveDuplicates(Split((Join(arrNames32,"") & "" & Join(arrNames64,"")),""))
    arrTypes = RemoveDuplicates(Split((Join(arrTypes32,"") & "" & Join(arrTypes64,"")),""))
    End If
    Else
    RetVal = oReg.EnumValues(hDefKey,sSubKeyName,arrNames,arrTypes)
    End If 'f64
    RegEnumValues = ((RetVal = 0) OR (RetVal64 = 0)) AND IsArray(arrNames) AND IsArray(arrTypes)
    End Function 'RegEnumValues
    '=======================================================================================================
    
    'Enumerate a registry key to return all subkeys
    Function RegEnumKey(hDefKey,sSubKeyName,arrKeys)
    Dim RetVal, RetVal64
    Dim arrKeys32, arrKeys64
    
    If f64 Then
    RetVal = oReg.EnumKey(hDefKey,sSubKeyName,arrKeys32)
    RetVal64 = oReg.EnumKey(hDefKey,Wow64Key(hDefKey, sSubKeyName),arrKeys64)
    If (RetVal = 0) AND (Not RetVal64 = 0) AND IsArray(arrKeys32) Then arrKeys = arrKeys32
    If (Not RetVal = 0) AND (RetVal64 = 0) AND IsArray(arrKeys64) Then arrKeys = arrKeys64
    If (RetVal = 0) AND (RetVal64 = 0) Then 
    If IsArray(arrKeys32) AND IsArray (arrKeys64) Then 
    arrKeys = RemoveDuplicates(Split((Join(arrKeys32,"") & "" & Join(arrKeys64,"")),""))
    ElseIf IsArray(arrKeys64) Then
    arrKeys = arrKeys64
    Else
    arrKeys = arrKeys32
    End If
    End If
    Else
    RetVal = oReg.EnumKey(hDefKey,sSubKeyName,arrKeys)
    End If 'f64
    RegEnumKey = ((RetVal = 0) OR (RetVal64 = 0)) AND IsArray(arrKeys)
    End Function 'RegEnumKey
    '=======================================================================================================
    
    'Wrapper around oReg.DeleteValue to handle 64 bit
    Sub RegDeleteValue(hDefKey, sSubKeyName, sName, fRegMultiSZ)
    Dim sWow64Key, sValue
    Dim iRetVal
    
    If dicKeepReg.Exists(LCase(sSubKeyName & sName)) Then
    If NOT fForce Then
    LogOnly " - Disallowing the delete of still required keypath element: " & HiveString(hDefKey) & "" & sSubKeyName & sName
    Exit Sub
    Else
    LogOnly " - Enforced delete of still required keypath element. Remaining applications will need a repair!"
    End If
    End If
    If f64 Then
    If dicKeepReg.Exists(LCase(Wow64Key(hDefKey, sSubKeyName) & sName)) Then
    If NOT fForce Then
    LogOnly " - Disallowing the delete of still required keypath element: " & HiveString(hDefKey) & "" & sSubKeyName & sName
    Exit Sub
    Else
    LogOnly " - Enforced delete of still required keypath element. Remaining applications will need a repair!"
    End If
    End If
    End If
    
    If RegValExists(hDefKey,sSubKeyName,sName) Then
    On Error Resume Next
    If RegReadValue(hDefKey,sSubKeyName,sName,sValue,"REG_MULTI_SZ") Then
    LogOnly " - Disallowing unsafe delete of REG_MULTI_SZ: " & HiveString(hDefKey) & "" & sSubKeyName & sName
    Exit Sub
    End If
    If Not fDetectOnly Then 
    LogOnly " - Delete registry value: " & HiveString(hDefKey) & "" & sSubKeyName & " -> " & sName
    iRetVal = 0
    iRetVal = oReg.DeleteValue(hDefKey, sSubKeyName, sName)
    CheckError "RegDeleteValue"
    If NOT (iRetVal=0) Then LogOnly "     Delete failed. Return value: "&iRetVal
    Else
    LogOnly " - Simulate delete registry value: " & HiveString(hDefKey) & "" & sSubKeyName & " -> " & sName
    End If
    On Error Goto 0
    End If 'RegValExists
    If f64 Then 
    sWow64Key = Wow64Key(hDefKey, sSubKeyName)
    If RegValExists(hDefKey,sWow64Key,sName) Then
    On Error Resume Next
    If RegReadValue(hDefKey,sSubKeyName,sName,sValue,"REG_MULTI_SZ") Then
    LogOnly " - Disallowing unsafe delete of REG_MULTI_SZ: " & HiveString(hDefKey) & "" & sSubKeyName & sName
    Exit Sub
    End If
    If Not fDetectOnly Then 
    LogOnly " - Delete registry value: " & HiveString(hDefKey) & "" & sWow64Key & " -> " & sName
    iRetVal = 0
    iRetVal = oReg.DeleteValue(hDefKey, sWow64Key, sName)
    CheckError "RegDeleteValue"
    If NOT (iRetVal=0) Then LogOnly "     Delete failed. Return value: "&iRetVal
    Else
    LogOnly " - Simulate delete registry value: " & HiveString(hDefKey) & "" & sWow64Key & " -> " & sName
    End If
    On Error Goto 0
    End If 'RegKeyExists
    End If
    End Sub 'RegDeleteValue
    '=======================================================================================================
    
    'Wrappper around RegDeleteKeyEx to handle 64bit scenrios
    Sub RegDeleteKey(hDefKey, sSubKeyName)
    Dim sWow64Key
    
    'Ensure trailing ""
    sSubKeyName = sSubKeyName & ""
    While InStr(sSubKeyName,"\")>0
    sSubKeyName = Replace(sSubKeyName,"\","")
    Wend
    
    If dicKeepReg.Exists(LCase(sSubKeyName)) Then
    If NOT fForce Then
    LogOnly " - Disallowing the delete of still required keypath element: " & HiveString(hDefKey) & "" & sSubKeyName
    Exit Sub
    Else
    LogOnly " - Enforced delete of still required keypath element. Remaining applications will need a repair!"
    End If
    End If
    If f64 Then
    If dicKeepReg.Exists(LCase(Wow64Key(hDefKey, sSubKeyName))) Then
    If NOT fForce Then
    LogOnly " - Disallowing the delete of still required keypath element: " & HiveString(hDefKey) & "" & sSubKeyName
    Exit Sub
    Else
    LogOnly " - Enforced delete of still required keypath element. Remaining applications will need a repair!"
    End If
    End If
    End If
    
    If Len(sSubKeyName) > 1 Then
    'Strip of trailing ""
    sSubKeyName = Left(sSubKeyName,Len(sSubKeyName)-1)
    End If
    
    If RegKeyExists(hDefKey, sSubKeyName) Then
    If Not fDetectOnly Then
    LogOnly " - Delete registry key: " & HiveString(hDefKey) & "" & sSubKeyName
    On Error Resume Next
    RegDeleteKeyEx hDefKey, sSubKeyName
    On Error Goto 0
    Else
    LogOnly " - Simulate delete registry key: " & HiveString(hDefKey) & "" & sSubKeyName
    End If
    End If 'RegKeyExists
    If f64 Then 
    sWow64Key = Wow64Key(hDefKey, sSubKeyName)
    If RegKeyExists(hDefKey,sWow64Key) Then
    If Not fDetectOnly Then
    LogOnly " - Delete registry key: " & HiveString(hDefKey) & "" & sWow64Key
    On Error Resume Next
    RegDeleteKeyEx hDefKey, sWow64Key
    On Error Goto 0
    Else
    LogOnly " - Simulate delete registry key: " & HiveString(hDefKey) & "" & sWow64Key
    End If
    End If 'RegKeyExists
    End If
    End Sub 'RegDeleteKey
    '=======================================================================================================
    
    'Recursively delete a registry structure
    Sub RegDeleteKeyEx(hDefKey, sSubKeyName) 
    Dim arrSubkeys
    Dim sSubkey
    Dim iRetVal
    
    On Error Resume Next
    oReg.EnumKey hDefKey, sSubKeyName, arrSubkeys
    If IsArray(arrSubkeys) Then 
    For Each sSubkey In arrSubkeys 
    RegDeleteKeyEx hDefKey, sSubKeyName & "" & sSubkey 
    Next 
    End If 
    If Not fDetectOnly Then 
    iRetVal = 0
    iRetVal = oReg.DeleteKey(hDefKey,sSubKeyName)
    If NOT (iRetVal=0) Then LogOnly "     Delete failed. Return value: "&iRetVal
    End If
    End Sub 'RegDeleteKeyEx
    '=======================================================================================================
    
    'Return the alternate regkey location on 64bit environment
    Function Wow64Key(hDefKey, sSubKeyName)
    Dim iPos
    
    Select Case hDefKey
    Case HKCU
    If Left(sSubKeyName,17) = "SoftwareClasses" Then
    Wow64Key = Left(sSubKeyName,17) & "Wow6432Node" & Right(sSubKeyName,Len(sSubKeyName)-17)
    Else
    iPos = InStr(sSubKeyName,"")
    Wow64Key = Left(sSubKeyName,iPos) & "Wow6432Node" & Right(sSubKeyName,Len(sSubKeyName)-iPos)
    End If
    
    Case HKLM
    If Left(sSubKeyName,17) = "SoftwareClasses" Then
    Wow64Key = Left(sSubKeyName,17) & "Wow6432Node" & Right(sSubKeyName,Len(sSubKeyName)-17)
    Else
    iPos = InStr(sSubKeyName,"")
    Wow64Key = Left(sSubKeyName,iPos) & "Wow6432Node" & Right(sSubKeyName,Len(sSubKeyName)-iPos)
    End If
    
    Case Else
    Wow64Key = "Wow6432Node" & sSubKeyName
    
    End Select 'hDefKey
    End Function 'Wow64Key
    '=======================================================================================================
    
    'Remove duplicate entries from a one dimensional array
    Function RemoveDuplicates(Array)
    Dim Item
    Dim oDic
    
    Set oDic = CreateObject("Scripting.Dictionary")
    For Each Item in Array
    If Not oDic.Exists(Item) Then oDic.Add Item,Item
    Next 'Item
    RemoveDuplicates = oDic.Keys
    End Function 'RemoveDuplicates
    '=======================================================================================================
    
    'End running instances of setup
    Sub EndCurrentInstalls ()
    Dim Processes, Process
    Dim iRet
    
    Set Processes = oWmiLocal.ExecQuery("Select * From Win32_Process Where Name like '%setup%' OR Name like '%install%'")
    For Each Process in Processes
    Log " - End process " & Process.Name
    iRet = Process.Terminate()
    CheckError "EndCurrentInstalls: " & "Process.Name"
    Next 'Process
    StopService "msiserver"
    End Sub 'EndCurrentInstalls
    '=======================================================================================================
    
    'Uses WMI to stop a service
    Function StopService(sService)
    Dim Services, Service
    Dim sQuery
    Dim iRet
    
    On Error Resume Next
    
    iRet = 0
    sQuery = "Select * From Win32_Service Where Name='" & sService & "'"
    Set Services = oWmiLocal.Execquery(sQuery)
    'Stop the service
    For Each Service in Services
    If UCase(Service.State) = "STARTED" Then iRet = Service.StopService
    If UCase(Service.State) = "RUNNING" Then iRet = Service.StopService
    
    Next 'Service
    StopService = (iRet = 0)
    End Function 'StopService
    '=======================================================================================================
    
    'Delete a service
    Sub DeleteService(sService)
    Dim Services, Service, Processes, Process
    Dim sQuery, sStates
    Dim iRet
    
    On Error Resume Next
    
    sStates = "STARTED;RUNNING"
    sQuery = "Select * From Win32_Service Where Name='" & sService & "'"
    Set Services = oWmiLocal.Execquery(sQuery)
    
    'Stop and delete the service
    For Each Service in Services
    Log " Found service " & sService & " in state " & Service.State
    If InStr(sStates,UCase(Service.State))>0 Then iRet = Service.StopService()
    'Ensure no more instances of the service are running
    Set Processes = oWmiLocal.ExecQuery("Select * From Win32_Process Where Name='" & sService & ".exe'")
    For Each Process in Processes
    iRet = Process.Terminate()
    Next 'Process
    If Not fDetectOnly Then 
    Log " - Deleting Service -> " & sService
    iRet = Service.Delete()
    Else
    Log " - Simulate deleting Service -> " & sService
    End If
    Next 'Service
    Set Services = Nothing
    Err.Clear
    
    End Sub 'DeleteService
    '=======================================================================================================
    
    'Translation for setup.exe error codes
    Function SetupRetVal(RetVal)
    Select Case RetVal
    Case 0 : SetupRetVal = "Success"
    Case 30001,1 : SetupRetVal = "AbstractMethod"
    Case 30002,2 : SetupRetVal = "ApiProhibited"
    Case 30003,3  : SetupRetVal = "AlreadyImpersonatingAUser"
    Case 30004,4 : SetupRetVal = "AlreadyInitialized"
    Case 30005,5 : SetupRetVal = "ArgumentNullException"
    Case 30006,6 : SetupRetVal = "AssertionFailed"
    Case 30007,7 : SetupRetVal = "CABFileAddFailed"
    Case 30008,8 : SetupRetVal = "CommandFailed"
    Case 30009,9 : SetupRetVal = "ConcatenationFailed"
    Case 30010,10 : SetupRetVal = "CopyFailed"
    Case 30011,11 : SetupRetVal = "CreateEventFailed"
    Case 30012,12 : SetupRetVal = "CustomizationPatchNotFound"
    Case 30013,13 : SetupRetVal = "CustomizationPatchNotApplicable"
    Case 30014,14 : SetupRetVal = "DuplicateDefinition"
    Case 30015,15 : SetupRetVal = "ErrorCodeOnly - Passthrough for Win32 error"
    Case 30016,16 : SetupRetVal = "ExceptionNotThrown"
    Case 30017,17 : SetupRetVal = "FailedToImpersonateUser"
    Case 30018,18 : SetupRetVal = "FailedToInitializeFlexDataSource"
    Case 30019,19 : SetupRetVal = "FailedToStartClassFactories"
    Case 30020,20 : SetupRetVal = "FileNotFound"
    Case 30021,21 : SetupRetVal = "FileNotOpen"
    Case 30022,22 : SetupRetVal = "FlexDialogAlreadyInitialized"
    Case 30023,23 : SetupRetVal = "HResultOnly - Passthrough for HRESULT errors"
    Case 30024,24 : SetupRetVal = "HWNDNotFound"
    Case 30025,25 : SetupRetVal = "IncompatibleCacheAction"
    Case 30026,26 : SetupRetVal = "IncompleteProductAddOns"
    Case 30027,27 : SetupRetVal = "InstalledProductStateCorrupt"
    Case 30028,28 : SetupRetVal = "InsufficientBuffer"
    Case 30029,29 : SetupRetVal = "InvalidArgument"
    Case 30030,30 : SetupRetVal = "InvalidCDKey"
    Case 30031,31 : SetupRetVal = "InvalidColumnType"
    Case 30032,31 : SetupRetVal = "InvalidConfigAddLanguage"
    Case 30033,33 : SetupRetVal = "InvalidData"
    Case 30034,34 : SetupRetVal = "InvalidDirectory"
    Case 30035,35 : SetupRetVal = "InvalidFormat"
    Case 30036,36 : SetupRetVal = "InvalidInitialization"
    Case 30037,37 : SetupRetVal = "InvalidMethod"
    Case 30038,38 : SetupRetVal = "InvalidOperation"
    Case 30039,39 : SetupRetVal = "InvalidParameter"
    Case 30040,40 : SetupRetVal = "InvalidProductFromARP"
    Case 30041,41 : SetupRetVal = "InvalidProductInConfigXml"
    Case 30042,42 : SetupRetVal = "InvalidReference"
    Case 30043,43 : SetupRetVal = "InvalidRegistryValueType"
    Case 30044,44 : SetupRetVal = "InvalidXMLProperty"
    Case 30045,45 : SetupRetVal = "InvalidMetadataFile"
    Case 30046,46 : SetupRetVal = "LogNotInitialized"
    Case 30047,47 : SetupRetVal = "LogAlreadyInitialized"
    Case 30048,48 : SetupRetVal = "MissingXMLNode"
    Case 30049,49 : SetupRetVal = "MsiTableNotFound"
    Case 30050,50 : SetupRetVal = "MsiAPICallFailure"
    Case 30051,51 : SetupRetVal = "NodeNotOfTypeElement"
    Case 30052,52 : SetupRetVal = "NoMoreGraceBoots"
    Case 30053,53 : SetupRetVal = "NoProductsFound"
    Case 30054,54 : SetupRetVal = "NoSupportedCulture"
    Case 30055,55 : SetupRetVal = "NotYetImplemented"
    Case 30056,56 : SetupRetVal = "NotAvailableCulture"
    Case 30057,57 : SetupRetVal = "NotCustomizationPatch"
    Case 30058,58 : SetupRetVal = "NullReference"
    Case 30059,59 : SetupRetVal = "OCTPatchForbidden"
    Case 30060,60 : SetupRetVal = "OCTWrongMSIDll"
    Case 30061,61 : SetupRetVal = "OutOfBoundsIndex"
    Case 30062,62 : SetupRetVal = "OutOfDiskSpace"
    Case 30063,63 : SetupRetVal = "OutOfMemory"
    Case 30064,64 : SetupRetVal = "OutOfRange"
    Case 30065,65 : SetupRetVal = "PatchApplicationFailure"
    Case 30066,66 : SetupRetVal = "PreReqCheckFailure"
    Case 30067,67 : SetupRetVal = "ProcessAlreadyStarted"
    Case 30068,68 : SetupRetVal = "ProcessNotStarted"
    Case 30069,69 : SetupRetVal = "ProcessNotFinished"
    Case 30070,70 : SetupRetVal = "ProductAlreadyDefined"
    Case 30071,71 : SetupRetVal = "ResourceAlreadyTracked"
    Case 30072,72 : SetupRetVal = "ResourceNotFound"
    Case 30073,73 : SetupRetVal = "ResourceNotTracked"
    Case 30074,74 : SetupRetVal = "SQLAlreadyConnected"
    Case 30075,75 : SetupRetVal = "SQLFailedToAllocateHandle"
    Case 30076,76 : SetupRetVal = "SQLFailedToConnect"
    Case 30077,77 : SetupRetVal = "SQLFailedToExecuteStatement"
    Case 30078,78 : SetupRetVal = "SQLFailedToRetrieveData"
    Case 30079,79 : SetupRetVal = "SQLFailedToSetAttribute"
    Case 30080,80 : SetupRetVal = "StorageNotCreated"
    Case 30081,81 : SetupRetVal = "StreamNameTooLong"
    Case 30082,82 : SetupRetVal = "SystemError"
    Case 30083,83 : SetupRetVal = "ThreadAlreadyStarted"
    Case 30084,84 : SetupRetVal = "ThreadNotStarted"
    Case 30085,85 : SetupRetVal = "ThreadNotFinished"
    Case 30086,86 : SetupRetVal = "TooManyProducts"
    Case 30087,87 : SetupRetVal = "UnexpectedXMLNodeType"
    Case 30088,88 : SetupRetVal = "UnexpectedError"
    Case 30089,89 : SetupRetVal = "Unitialized"
    Case 30090,90 : SetupRetVal = "UserCancel"
    Case 30091,91 : SetupRetVal = "ExternalCommandFailed"
    Case 30092,92 : SetupRetVal = "SPDatabaseOverSize"
    Case 30093,93 : SetupRetVal = "IntegerTruncation"
    'msiexec return values
    Case 1259 : SetupRetVal = "APPHELP_BLOCK"
    Case 1601 : SetupRetVal = "INSTALL_SERVICE_FAILURE"
    Case 1602 : SetupRetVal = "INSTALL_USEREXIT"
    Case 1603 : SetupRetVal = "INSTALL_FAILURE"
    Case 1604 : SetupRetVal = "INSTALL_SUSPEND"
    Case 1605 : SetupRetVal = "UNKNOWN_PRODUCT"
    Case 1606 : SetupRetVal = "UNKNOWN_FEATURE"
    Case 1607 : SetupRetVal = "UNKNOWN_COMPONENT"
    Case 1608 : SetupRetVal = "UNKNOWN_PROPERTY"
    Case 1609 : SetupRetVal = "INVALID_HANDLE_STATE"
    Case 1610 : SetupRetVal = "BAD_CONFIGURATION"
    Case 1611 : SetupRetVal = "INDEX_ABSENT"
    Case 1612 : SetupRetVal = "INSTALL_SOURCE_ABSENT"
    Case 1613 : SetupRetVal = "INSTALL_PACKAGE_VERSION"
    Case 1614 : SetupRetVal = "PRODUCT_UNINSTALLED"
    Case 1615 : SetupRetVal = "BAD_QUERY_SYNTAX"
    Case 1616 : SetupRetVal = "INVALID_FIELD"
    Case 1618 : SetupRetVal = "INSTALL_ALREADY_RUNNING"
    Case 1619 : SetupRetVal = "INSTALL_PACKAGE_OPEN_FAILED"
    Case 1620 : SetupRetVal = "INSTALL_PACKAGE_INVALID"
    Case 1621 : SetupRetVal = "INSTALL_UI_FAILURE"
    Case 1622 : SetupRetVal = "INSTALL_LOG_FAILURE"
    Case 1623 : SetupRetVal = "INSTALL_LANGUAGE_UNSUPPORTED"
    Case 1624 : SetupRetVal = "INSTALL_TRANSFORM_FAILURE"
    Case 1625 : SetupRetVal = "INSTALL_PACKAGE_REJECTED"
    Case 1626 : SetupRetVal = "FUNCTION_NOT_CALLED"
    Case 1627 : SetupRetVal = "FUNCTION_FAILED"
    Case 1628 : SetupRetVal = "INVALID_TABLE"
    Case 1629 : SetupRetVal = "DATATYPE_MISMATCH"
    Case 1630 : SetupRetVal = "UNSUPPORTED_TYPE"
    Case 1631 : SetupRetVal = "CREATE_FAILED"
    Case 1632 : SetupRetVal = "INSTALL_TEMP_UNWRITABLE"
    Case 1633 : SetupRetVal = "INSTALL_PLATFORM_UNSUPPORTED"
    Case 1634 : SetupRetVal = "INSTALL_NOTUSED"
    Case 1635 : SetupRetVal = "PATCH_PACKAGE_OPEN_FAILED"
    Case 1636 : SetupRetVal = "PATCH_PACKAGE_INVALID"
    Case 1637 : SetupRetVal = "PATCH_PACKAGE_UNSUPPORTED"
    Case 1638 : SetupRetVal = "PRODUCT_VERSION"
    Case 1639 : SetupRetVal = "INVALID_COMMAND_LINE"
    Case 1640 : SetupRetVal = "INSTALL_REMOTE_DISALLOWED"
    Case 1641 : SetupRetVal = "SUCCESS_REBOOT_INITIATED"
    Case 1642 : SetupRetVal = "PATCH_TARGET_NOT_FOUND"
    Case 1643 : SetupRetVal = "PATCH_PACKAGE_REJECTED"
    Case 1644 : SetupRetVal = "INSTALL_TRANSFORM_REJECTED"
    Case 1645 : SetupRetVal = "INSTALL_REMOTE_PROHIBITED"
    Case 1646 : SetupRetVal = "PATCH_REMOVAL_UNSUPPORTED"
    Case 1647 : SetupRetVal = "UNKNOWN_PATCH"
    Case 1648 : SetupRetVal = "PATCH_NO_SEQUENCE"
    Case 1649 : SetupRetVal = "PATCH_REMOVAL_DISALLOWED"
    Case 1650 : SetupRetVal = "INVALID_PATCH_XML"
    Case 3010 : SetupRetVal = "SUCCESS_REBOOT_REQUIRED"
    Case Else : SetupRetVal = "Unknown Return Value"
    End Select
    End Function 'SetupRetVal
    '=======================================================================================================
    
    Function GetProductID(sProdID)
    Dim sReturn
    
    Select Case sProdId
    
    Case "000F" : sReturn = "MONDO"
    Case "0010" : sReturn = "WEBFLDRS"
    Case "0011" : sReturn = "PROPLUS"
    Case "0012" : sReturn = "STANDARD"
    Case "0013" : sReturn = "BASIC"
    Case "0014" : sReturn = "PRO"
    Case "0015" : sReturn = "ACCESS"
    Case "0016" : sReturn = "EXCEL"
    Case "0017" : sReturn = "SharePointDesigner"
    Case "0018" : sReturn = "PowerPoint"
    Case "0019" : sReturn = "Publisher"
    Case "001A" : sReturn = "Outlook"
    Case "001B" : sReturn = "Word"
    Case "001C" : sReturn = "AccessRuntime"
    Case "001F" : sReturn = "Proof"
    Case "0020" : sReturn = "O2007CNV"
    Case "0021" : sReturn = "VisualWebDeveloper"
    Case "0026" : sReturn = "ExpressionWeb"
    Case "0029" : sReturn = "Excel"
    Case "002A" : sReturn = "Office64"
    Case "002B" : sReturn = "Word"
    Case "002C" : sReturn = "Proofing"
    Case "002E" : sReturn = "Ultimate"
    Case "002F" : sReturn = "HomeAndStudent"
    Case "0028" : sReturn = "IME"
    Case "0030" : sReturn = "Enterprise"
    Case "0031" : sReturn = "ProfessionalHybrid"
    Case "0033" : sReturn = "Personal"
    Case "0035" : sReturn = "ProfessionalHybrid"
    Case "0037" : sReturn = "PowerPoint"
    Case "003A" : sReturn = "PrjStd"
    Case "003B" : sReturn = "PrjPro"
    Case "003D" : sReturn = "SINGLEIMAGE"
    Case "0043" : sReturn = "OFFICE32"
    Case "0044" : sReturn = "InfoPath"
    Case "0045" : sReturn = "XWEB"
    Case "0048" : sReturn = "OLC"
    Case "0049" : sReturn = "ACADEMIC"
    Case "004A" : sReturn = "OWC11"
    Case "0051" : sReturn = "VISPRO"
    Case "0052" : sReturn = "VisView"
    Case "0053" : sReturn = "VisStd"
    Case "0054" : sReturn = "VisMUI"
    Case "0055" : sReturn = "VisMUI"
    Case "0057" : sReturn = "VISIO"
    Case "0061" : sReturn = "CLICK2RUN"
    Case "0062" : sReturn = "CLICK2RUN"
    Case "0066" : sReturn = "CLICK2RUN"
    Case "006C" : sReturn = "CLICK2RUN"
    Case "006D" : sReturn = "CLICK2RUN"
    Case "006E" : sReturn = "Shared"
    Case "006F" : sReturn = "OFFICE"
    Case "0070" : sReturn = "OOBE"
    Case "0074" : sReturn = "STARTER"
    Case "007A" : sReturn = "OLC" 'Outlook Connector
    Case "007C" : sReturn = "OSCFB" 'Outlook Social Connector for FaceBook
    Case "007D" : sReturn = "OSCWL" 'Outlook Social Connector for Windows Live Messenger
    Case "007F" : sReturn = "OLC" 'Outlook Social Connector
    Case "008A" : sReturn = "RecentDocs"
    Case "008B" : sReturn = "SmallBusinessBasics"
    Case "00A1" : sReturn = "ONENOTE"
    Case "00A3" : sReturn = "OneNoteHomeStudent"
    Case "00A7" : sReturn = "CPAO"
    Case "00A9" : sReturn = "InterConnect"
    Case "00AF" : sReturn = "PPtView"
    Case "00B0" : sReturn = "ExPdf"
    Case "00B1" : sReturn = "ExXps"
    Case "00B2" : sReturn = "ExPdfXps"
    Case "00B4" : sReturn = "PrjMUI"
    Case "00B5" : sReturn = "PrjtMUI"
    Case "00B9" : sReturn = "AER"
    Case "00BA" : sReturn = "Groove"
    Case "00CA" : sReturn = "SmallBusiness"
    Case "00E0" : sReturn = "Outlook"
    Case "00D1" : sReturn = "ACE"
    Case "0100" : sReturn = "OfficeMUI"
    Case "0101" : sReturn = "OfficeXMUI"
    Case "0103" : sReturn = "PTK"
    Case "0114" : sReturn = "GrooveSetupMetadata"
    Case "0115" : sReturn = "SharedSetupMetadata"
    Case "0116" : sReturn = "SharedSetupMetadata"
    Case "0117" : sReturn = "AccessSetupMetadata"
    Case "011A" : sReturn = "SendASmile"
    Case "011D" : sReturn = "ProPlusSubscription"
    Case "011F" : sReturn = "OLConnect"
    Case "0126" : sReturn = "WWLIBCXM"
    
    Case "1014" : sReturn = "STS"
    Case "1015" : sReturn = "WSSMUI"
    Case "1032" : sReturn = "PJSVRAPP"
    Case "104B" : sReturn = "SPS"
    Case "104E" : sReturn = "SPSMUI"
    Case "107F" : sReturn = "OSrv"
    Case "1080" : sReturn = "OSrv"
    Case "1088" : sReturn = "lpsrvwfe"
    Case "10D7" : sReturn = "IFS"
    Case "10D8" : sReturn = "IFSMUI"
    Case "10EB" : sReturn = "DLCAPP"
    Case "10F5" : sReturn = "XLSRVAPP"
    Case "10F6" : sReturn = "XlSrvWFE"
    Case "10F7" : sReturn = "DLC"
    Case "10F8" : sReturn = "SlSrvMui"
    Case "10FB" : sReturn = "OSrchWFE"
    Case "10FC" : sReturn = "OSRCHAPP"
    Case "10FD" : sReturn = "OSrchMUI"
    Case "1103" : sReturn = "DLC"
    Case "1104" : sReturn = "LHPSRV"
    Case "1105" : sReturn = "PIA"
    Case "1106" : sReturn = "GRVMGMTSRV"
    Case "1109" : sReturn = "GSERVERRELAY"
    Case "110D" : sReturn = "OSERVER"
    Case "110F" : sReturn = "PSERVER"
    Case "1110" : sReturn = "WSS"
    Case "1121" : sReturn = "SPSSDK"
    Case "1122" : sReturn = "SPSDev"
    Case "1163" : sReturn = "SCC" 'SharePoint Client Components
    Case Else : sReturn = sProdID
    
    End Select 'sProdId
    GetProductID = sReturn
    End Function 'GetProductID
    '=======================================================================================================
    
    Sub Log (sLog)
    wscript.echo sLog
    LogStream.WriteLine sLog
    End Sub 'Log
    '=======================================================================================================
    
    Sub LogOnly (sLog)
    LogStream.WriteLine sLog
    End Sub 'Log
    '=======================================================================================================
    
    Sub CheckError(sModule)
    If Err <> 0 Then 
    LogOnly "   " & Now & " - " & sModule & " - Source: " & Err.Source & "; Err# (Hex): " & Hex( Err ) & _
    "; Err# (Dec): " & Err & "; Description : " & Err.Description
    End If 'Err = 0
    Err.Clear
    End Sub
    '=======================================================================================================
    
    'Command line parser
    Sub ParseCmdLine
    
    Dim iCnt, iArgCnt
    Dim arrArguments
    Dim sArg0
    
    iArgCnt = Wscript.Arguments.Count
    If iArgCnt > 0 Then
    If wscript.Arguments(0) = "UAC" Then
    If wscript.arguments.count = 1 Then iArgCnt = 0
    End If
    End If
    If iArgCnt = 0 Then
    Select Case UCase(wscript.ScriptName)
    Case Else
    'Create the log
    CreateLog
    Log "No argument specified. Preparing user prompt" & vbCrLf
    FindInstalledOProducts
    If dicInstalledSku.Count > 0 Then sDefault = Join(RemoveDuplicates(dicInstalledSku.Items),",") Else sDefault = "CLIENTALL"
    sDefault = InputBox("Enter a list of " & ONAME & " products to remove" & vbCrLf & vbCrLf & _
    "Examples:" & vbCrLf & _
    "CLIENTALL" & vbTab & "-> all Client products" & vbCrLf & _
    "SERVER" & vbTab & "-> all Server products" & vbCrLf & _
    "ALL" & vbTab & vbTab & "-> all Server & Client products" & vbCrLf & _
    "ProPlus,PrjPro" & vbTab & "-> ProPlus and Project" & vbCrLf &_
    "?" & vbTab & vbTab & "-> display Help", _
    SCRIPTFILE & " - " & ONAME & " remover", _
    sDefault)
    
    If IsEmpty(sDefault) Then 'User cancelled
    Log "User cancelled. CleanUp & Exit."
    'Undo temporary entries created in ARP
    TmpKeyCleanUp
    wscript.quit 1602
    End If 'IsEmpty(sDefault)
    Log "Answer from prompt: " & sDefault & vbCrLf
    sDefault = Trim(UCase(Trim(Replace(sDefault,Chr(34),""))))
    arrArguments = Split(Trim(sDefault)," ")
    If UBound(arrArguments) = -1 Then ReDim arrArguments(0)
    End Select
    Else
    ReDim arrArguments(iArgCnt-1)
    For iCnt = 0 To (iArgCnt-1)
    arrArguments(iCnt) = UCase(Wscript.Arguments(iCnt))
    Next 'iCnt
    End If 'iArgCnt = 0
    
    'Handle the SKU list
    sArg0 = Replace(arrArguments(0),"/","")
    If Left(sArg0,1) = "-" Then sArg0 = Mid(sArg0,2)
    
    Select Case UCase(sArg0)
    
    Case "?"
    ShowSyntax
    
    Case "ALL"
    fRemoveAll = True
    fRemoveOse = False
    
    Case "CLIENTSUITES"
    fRemoveCSuites = True
    fRemoveOse = False
    
    Case "CLIENTSTANDALONE"
    fRemoveCSingle = True
    fRemoveOse = False
    
    Case "CLIENTALL"
    fRemoveCSuites = True
    fRemoveCSingle = True
    fRemoveOse = False
    
    Case "SERVER"
    fRemoveSrv = True
    fRemoveOse = False
    
    Case "ALL,OSE"
    fRemoveAll = True
    fRemoveOse = True
    
    Case Else
    fRemoveAll = False
    fRemoveOse = False
    sSkuRemoveList = sArg0
    
    End Select
    
    For iCnt = 0 To UBound(arrArguments)
    
    Select Case arrArguments(iCnt)
    
    Case "?","/?","-?"
    ShowSyntax
    
    Case "/B","/BYPASS"
    If UBound(arrArguments)>iCnt Then
    If InStr(arrArguments(iCnt+1),"1")>0 Then fBypass_Stage1 = True
    If InStr(arrArguments(iCnt+1),"2")>0 Then fBypass_Stage2 = True
    If InStr(arrArguments(iCnt+1),"3")>0 Then fBypass_Stage3 = True
    If InStr(arrArguments(iCnt+1),"4")>0 Then fBypass_Stage4 = True
    End If
    
    Case "/D","/DELETEUSERSETTINGS"
    fKeepUser = False
    
    Case "/FR","/FASTREMOVE"
    fBypass_Stage1 = True
    fSkipSD = True
    
    Case "/F","/FORCE"
    fForce = True
    
    Case "/K","/KEEPUSERSETTINGS"
    fKeepUser = True
    
    Case "/L","/LOG"
    fLogInitialized = False
    If UBound(arrArguments)>iCnt Then
    If oFso.FolderExists(arrArguments(iCnt+1)) Then 
    sLogDir = arrArguments(iCnt+1)
    Else
    On Error Resume Next
    oFso.CreateFolder(arrArguments(iCnt+1))
    If Err <> 0 Then sLogDir = sScrubDir Else sLogDir = arrArguments(iCnt+1)
    End If
    End If
    
    Case "/N","/NOCANCEL"
    fNoCancel = True
    
    Case "/NE","/NOELEVATE"
    fNoElevate = True
    
    Case "/O","/OSE"
    fRemoveOse = True
    
    Case "/P","/PREVIEW","/DETECTONLY"
    fDetectOnly = True
    
    Case "/Q","/QUIET"
    fQuiet = True
    
    Case "/QB"
    fQuiet = True
    fBasic = True
    
    Case "/QND"
    fBypass_Stage1 = True
    fBypass_Stage2 = True
    fBypass_Stage3 = True
    fRemoveOse = True
    fRemoveOspp = True
    fRemoveAll = True
    fSkipSD = True
    fForce = True
    
    Case "/S","/SKIPSD","/SKIPSHORTCUTDETECTION"
    fSkipSD = True
    
    Case "/R","/RECONCILE"
    fTryReconcile = True
    
    Case Else
    
    End Select
    Next 'iCnt
    If Not fLogInitialized Then CreateLog
    
    End Sub 'ParseCmdLine
    '=======================================================================================================
    
    Sub CreateLog
    Dim DateTime
    Dim sLogName
    
    On Error Resume Next
    'Create the log file
    Set DateTime = CreateObject("WbemScripting.SWbemDateTime")
    DateTime.SetVarDate Now,True
    sLogName = sLogDir & "" & oWShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
    sLogName = sLogName &  "_" & Left(DateTime.Value,14)
    sLogName = sLogName & "_ScrubLog.txt"
    Err.Clear
    Set LogStream = oFso.CreateTextFile(sLogName,True,True)
    If Err <> 0 Then 
    Err.Clear
    sLogDir = sScrubDir
    sLogName = sLogDir & "" & oWShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
    sLogName = sLogName &  "_" & Left(DateTime.Value,14)
    sLogName = sLogName & "_ScrubLog.txt"
    Set LogStream = oFso.CreateTextFile(sLogName,True,True)
    End If
    
    Log "Microsoft Customer Support Services - " & ONAME & " Removal Utility" & vbCrLf & vbCrLf & _
    "OffScrub Version: " & SCRIPTVERSION & vbCrLf & _
    "64 bit OS: " & f64
    LogOnly     "OS Details: " & sOSinfo & vbCrLf
    Log         "Start removal: " & Now & vbCrLf
    fLogInitialized = True
    End Sub 'CreateLog
    '=======================================================================================================
    
    Sub RelaunchAsCScript
    Dim Argument
    Dim sCmdLine
    
    sCmdLine = "cmd.exe /k " & WScript.Path & "cscript.exe //NOLOGO " & Chr(34) & WScript.scriptFullName & Chr(34)
    If Wscript.Arguments.Count > 0 Then
    For Each Argument in Wscript.Arguments
    sCmdLine = sCmdLine  &  " " & chr(34) & Argument & chr(34)
    Next 'Argument
    End If
    oWShell.Run sCmdLine,1,False
    Wscript.Quit
    End Sub 'RelaunchAsCScript
    '=======================================================================================================
    
    Sub RelaunchElevated
    Dim Argument
    Dim sCmdLine
    Dim oShell
    
    Set oShell = CreateObject("Shell.Application")
    
    sCmdLine = Chr(34) & WScript.scriptFullName & Chr(34)
    If Wscript.Arguments.Count > 0 Then
    For Each Argument in Wscript.Arguments
    Select Case UCase(Argument)
    Case "/Q","/QUIET"
    'Don't try to relaunch in quiet mode
    Exit Sub
    Case "UAC"
    'Already tried elevated relaunch
    Exit Sub
    Case Else
    sCmdLine = sCmdLine  &  " " & chr(34) & Argument & chr(34)
    End Select
    Next 'Argument
    End If
    oShell.ShellExecute "cscript.exe", sCmdLine & " /NoElevate UAC", "", "runas", 1
    Wscript.Quit
    End Sub 'RelaunchElevated
    '=======================================================================================================
    
    'Show the expected syntax for the script usage
    Sub ShowSyntax
    TmpKeyCleanUp
    Wscript.Echo sErr & vbCrLf & _
    SCRIPTFILE & " V " & SCRIPTVERSION & vbCrLf & _
    "Copyright (c) Microsoft Corporation. All Rights Reserved" & vbCrLf & vbCrLf & _
    SCRIPTFILE & " helps to remove " & ONAME & " Server & Client products" & vbCrLf & _
    "when a regular uninstall is no longer possible" & vbCrLf & vbCrLf & _
    "Usage:" & vbTab & SCRIPTFILE & " [List of config ProductIDs] [Options]" & vbCrLf & vbCrLf & _
    vbTab & "/?                               ' Displays this help"& vbCrLf &_
    vbTab & "/Force                           ' Enforces file removal. May cause data loss!" & vbCrLf &_
    vbTab & "/SkipShortcutDetection           ' Does not search the local hard drives for shortcuts" & vbCrLf & _
    vbTab & "/Log [LogfolderPath]             ' Custom folder for log files" & vbCrLf & _
    vbTab & "/NoCancel                        ' Setup.exe and Msiexec.exe have no Cancel button" & vbCrLf &_
    vbTab & "/OSE                             ' Forces removal of the Office Source Engine service" & vbCrLf &_
    vbTab & "/Quiet                           ' Setup.exe and Msiexec.exe run quiet with no UI" & vbCrLf &_
    vbTab & "/Preview                         ' Run this script to preview what would get removed"& vbCrLf & vbCrLf & _
    "Examples:"& vbCrLf & _
    vbTab & SCRIPTFILE & " CLIENTALL         ' Remove all " & ONAME & " Client products" & vbCrLf &_
    vbTab & SCRIPTFILE & " SERVER            ' Remove all " & ONAME & " Server products" & vbCrLf &_
    vbTab & SCRIPTFILE & " ALL               ' Remove all " & ONAME & " Server & Client products" & vbCrLf &_
    vbTab & SCRIPTFILE & " ProPlus,PrjPro    ' Remove ProPlus and Project" & vbCrLf
    Wscript.Quit
    End Sub 'ShowSyntax
    '=======================================================================================================
    

    RRS feed

    • Remove From My Forums
    • Question

    • There was an error when trying to rearm Office. You can try passing the SKU ID as a parameter. Passing the SKU ID is necessary if you are relying on an activation to permit an additional rearm.
      Error: 0xc004d307
      On a computer running Microsoft Windows non-core edition, run ‘slui.exe 0x2a 0xc004d307’ to display the error text.

    All replies

    • This is a forum strictly related to SysInternals Tools questions.

      Microsoft has moved all the old version of the forums to a new site called «Microsoft Q&A»:
      Microsoft Q&A supported products | Microsoft Docs

      Please visit that site and post your question to the rigth forum.

      Thanks for your cooperation!

      HTH

      -mario

    Понравилась статья? Поделить с друзьями:
  • Ошибка 0xc004c060 при активации windows 10 pro
  • Ошибка 0xc004c060 при активации office как исправить
  • Ошибка 0xc004c060 активация не удалась windows 10
  • Ошибка 0xc004c020 при активации windows 10
  • Ошибка 0xc0040001 techstream