пятница, 15 ноября 2013 г.

SYSPREP прекращает свою работу с неустранимой ошибкой на ОС Windows Vista/2008 и выше

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


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

[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_MACHINE\SYSTEM\Setup\Status\SysprepStatus\":

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

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

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

[0x0f0082] SYSPRP LaunchDll:Failure occurred while executing 'C:\Windows\System32\slc.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_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\SoftwhereProtectionPlatform\

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

5 комментариев:

  1. твик рабочий! Запихнул в батник вызывающий sysprep)

    ОтветитьУдалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить
  3. После трёх дней ковыряния sysprep я создал готовый bat-файл запуска без сбоев и файл ответов unattend.xml.

    ****************************
    *** Ниже описание файлов ***
    ****************************

    1. Файл unattend.xml
    - Пропускает создание нового пользователя в OOBE (SkipMachineOOBE, SkipUserOOBE)
    - Фиксирует ошибки [0x0f0082], [0x0f0070], [0x0f00a8] (SkipRearm)

    2. Файл Start_sysprep.bat
    - Предназначен для Windows 7 x64 (не тестировался на Windows 8+ !)
    - Останавливает службу WMPNetworkSvc, мешающую работе sysprep
    - Переустанавливает службу MSDTC, мешающую работе sysprep
    - Фиксирует ошибки [0x0f0073], [0x0f00ae]
    - Запускает sysprep.exe с параметрами /oobe /shutdown /generalize /unattend(подгрузка файла ответов)

    ************************
    *** Ниже коды файлов ***
    ************************

    1. Содержимое файла ответов 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>
    <settings pass="oobeSystem">
    <component name="Microsoft-Windows-Shell-Setup" 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">
    <OOBE>
    <SkipMachineOOBE>true</SkipMachineOOBE>
    <SkipUserOOBE>true</SkipUserOOBE>
    </OOBE>
    </component>
    </settings>
    </unattend>

    2. Содержимое файла запуска Start_sysprep.bat

    @echo off
    title Sysprep batnik-starter

    echo.
    echo Stop service "WMPNetworkSvc"
    net stop "WMPNetworkSvc"

    echo.
    echo Re-install service "MSDTC"
    echo Work in progress...
    msdtc –uninstall
    timeout /t 1 /nobreak > nul
    msdtc -install

    echo.
    echo Fix errors
    rem Error #1: [0x0f0073] SYSPRP RunExternalDlls:Not running DLLs; either the machine is in an invalid state or we couldn't update the recorded state, dwRet = 31
    echo Fix #1: [0x0f0073]
    rem Error #2: [0x0f00ae] SYSPRP WinMain:Hit failure while processing sysprep cleanup external providers; hr = 0x8007001f
    echo Fix #2: [0x0f00ae]
    reg add "HKLM\SYSTEM\Setup\Status\SysprepStatus" /v "CleanupState" /t REG_DWORD /d "0x00000002" /f
    reg add "HKLM\SYSTEM\Setup\Status\SysprepStatus" /v "GeneralizationState" /t REG_DWORD /d "0x00000007" /f

    echo.
    rem Start sysprep with parameters
    start "" "%systemroot%\system32\sysprep\sysprep.exe" /oobe /shutdown /generalize /unattend:"%systemroot%\system32\sysprep\unattend.xml"
    pause

    *****************************
    *** Инструкция по запуску ***
    *****************************

    1. Предисловие. Bat-файл и файл ответов предназначены ДЛЯ WINDOWS 7 X64! Скрипт не сработает на системе x86, а также не тестировался на Windows 8+ !
    2. Файлы Start_sysprep.bat и unattend.xml поместить в директорию: %systemroot%\system32\sysprep\
    3. Поменять под себя пункты в unattend.xml (если требуется).
    4. Запустить Start_sysprep.bat от имени администратора - обязательно!
    5. Дождаться выключения системы. Готово.

    Инструкция написана администратором игрового проекта Biff.pro.
    Инструкция может быть скопирована и размещена без уведомления, обратных ссылок и прочего :)

    ОтветитьУдалить