Автозапуск приложений в среде Windows PE и оболочка.

Тема в разделе "Основы работы с Windows PE", создана пользователем Severnyj, 29 сен 2012.

  1. Severnyj
    Оффлайн

    Severnyj Команда форума Супер-Модератор Ассоциация VN/VIP

    Сообщения:
    7.841
    Симпатии:
    8.599
    Как уже все заметили при загрузке с образа диска, созданного таким или таким способом, сначала запускается окно командной строки, а затем открывается uVS.

    Как такое происходит? и Зачем это нужно?

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

    Что это за способы?

    ***


    Первый способ это редактирование файла startnet.cmd на этапе, когда wim-образ уже смонтирован и настроен, но еще не отключен командой:

    Код (Text):
    Dism /Unmount-Wim /MountDir:<Путь к директории со смонтированным образом> /Commit
    Подробнее о монтировании образа и его настройке читайте в этой статье.

    Данный файл расположен по следующему пути:

    Код (Text):
    <Путь к директории со смонтированным образом>\Windows\system32\
    и в чистом виде содержит всего одну обязательную строку:

    Код (Text):
    wpeinit
    Команда wpeinit является обязательной поскольку ее назначением является инициализация системы Windows PE при каждой загрузке.

    Отредактировав файл startnet.cmd, можно сделать так, чтобы после выполнения инициализации запускалась необходимая нам программа, например:

    Код (Text):
    wpeinit
    %SYSTEMDRIVE%\uvs\FAR\Far.exe
    здесь будет запущен файловый менеджер Far, входящий в набор uVS_Pack.

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

    ***​


    Второй способ - это редактирование файла Winpeshl.ini, который находится в той же директории, что и файл startnet.cmd. По краткой инструкции - задумка прекрасная, но к сожалению из-за каких-то ошибок она работает не так, как мы это себе представляем. И отличие только в том, что приложения выполняются по очереди, а по закрытию последнего выполняется автоматическая перезагрузка. Поэтому в свое время я написал маленькую программку, задачей, которой является:

    • Запуск определенного командного файла, в котором мы можем прописать все приложения, которые будут запускаться в начале загрузки оболочки. В нашем случае это файл, который будет располагаться по следующему пути:

      Код (Text):
      <Путь к директории со смонтированным образом>\explorer\autorun.cmd
      и по умолчанию файл должен иметь только одну уже знакомую нам строку:

      Код (Text):
      wpeinit
    • После окончания выполнения всех команд из файла autorun.cmd (В нем можно прописать практически что угодно, будь то твики реестра или создание директорий), будет запущен файл располагающийся по пути:

      Код (Text):
      <Путь к директории со смонтированным образом>\explorer\explorer.exe
      , который и является оболочкой - это может быть BS explorer или Nu2Menu - исполняемый файл должен быть переименован в explorer.exe, а конфигурационные файлы приложения, использующегося в качестве оболочки, должны быть отредактированы.

    • Затем программа остается висеть в памяти и ждать пока процесс explorer.exe не будет завершен - после чего произойдет все та же автоматическая перезагрузка.

    Данная программка написана на языке AutoIt и имеет такой код:

    Код (Text):
    #cs ----------------------------------------------------------------------------

     AutoIt Version: 3.3.6.1
     Author:         Severnyj

     Script Function:
        Template AutoIt script.

    #ce ----------------------------------------------------------------------------

    ; Script Start - Add your code below here

    #NoTrayIcon

    $System32Dir=@SystemDir
    $SystemDrive=Stringleft($System32Dir,2)

    If FileExists($SystemDrive & "\explorer\autorun.cmd") <> 1  Then
            $deadfile = " Отсутствует необходимый файл: " & $SystemDrive & "\explorer\autorun.cmd"
            MsgBox(4096, "Внимание!", "Работа программы завершается " & $deadfile)
            _END ()
    EndIf

    If FileExists($SystemDrive & "\explorer\explorer.exe") <> 1  Then
            $deadfile = " Отсутствует необходимый файл: " & $SystemDrive & "\explorer\explorer.exe"
            MsgBox(4096, "Внимание!", "Работа программы завершается " & $deadfile)
            _END ()
    EndIf
         

    SplashTextOn("Пожалуйста подождите...", "Инициализация системы...",200,80)
    WinActivate("Пожалуйста подождите...", "")
          RunWait($SystemDrive & "\explorer\autorun.cmd")
    SplashOff()

    SplashTextOn("Пожалуйста подождите...", "Запуск оболочки...",200,80)
    WinActivate("Пожалуйста подождите...", "")
          Run($SystemDrive & "\explorer\explorer.exe")
    SplashOff()

    ProcessWaitClose("explorer.exe")
    _END ()

    Func _END ()  
        Shutdown(2)
        Exit
    EndFunc



     

    Готовая скомпиллированная версия прикреплена к сообщению.

    Запускать мы ее будем в среде предустановки путем автозагрузки редактированием файла WinPeshl.ini:

    Код (Text):
    [LaunchApp]
    AppPath = %SYSTEMDRIVE%\<путь>\launcher.exe
    [LaunchApps]
    Так при запуске Windows PE будет запущен наш автозагрузчик, который выполнит описанные выше операции.
     

    Вложения:

    • launcher.zip
      Размер файла:
      267,1 КБ
      Просмотров:
      41
    Vadim07, Sandor, Kиpилл и 3 другим нравится это.

Поделиться этой страницей