Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка Windows 2000/XP/2003 » Маленькие хитрости автоустановки

Ответить
Настройки темы
Маленькие хитрости автоустановки

(*.*)


Сообщения: 36572
Благодарности: 6702


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 07-06-2008
Описание: добавлены ссылки на статьи сайта
Маленькие хитрости автоустановки

Доброго времени суток!

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

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

На сайте (new!):В Wiki:
Локальные правила темы
  1. Публикуйте каждую хитрость отдельным сообщением. Так будет легче сослаться на пост, если возникнет необходимость дать ссылку в другой ветке.
  2. Не нужно публиковать в теме твики реестра, за исключением тех случаев когда твик является неотъемлемой частью хитрости. Для твиков прикреплена отдельная тема.
  3. Не нужно задавать вопросы, не относящиеся к опубликованным в теме материалам. Если вы хотите что-то осуществить, но не знаете как - воспользуйтесь правилами создания тем на форуме. Такие вопросы будут удаляться без сожаления.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 06:26, 22-12-2005

 

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Подскажите пожалуйста где можно скачать winrecab.rar и msretime.rar.
По ссылкам скачать не получается, архивы битые.

Отправлено: 17:15, 20-11-2006 | #91



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 30
Благодарности: 0

Профиль | Отправить PM | Цитировать


Кто-нибудь может выложить утилитку CDEject.exe? В этой теме аттач битый, а в инете натыкался только на шараварные подобные проги.

Отправлено: 16:02, 03-12-2006 | #92


Аватара для qeraser

Старожил


Сообщения: 387
Благодарности: 40

Профиль | Отправить PM | Цитировать


vlastan
Пожалуйста

Отправлено: 16:05, 03-12-2006 | #93


Новый участник


Сообщения: 30
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 10:48, 04-12-2006 | #94


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


vlastan
Цитата:
в инете натыкался только на шараварные подобные проги
AutoIT скрипт устроит?... Легко скомпилировать в EXE или изменить функциональность по желанию:
Код: Выделить весь код
; Читаем параметр командной строки и если обнаружен вызываем функцию,
; переменная окружения ERRORLEVEL устанавливается равной количеству ошибок
; (привод может быть заблокирован Nero или другой программой)

$LastParm = $CmdLine[$CmdLine[0]]
If $LastParm Then
    _CDEject ($LastParm)
    Exit (@error)
EndIf

; Функция выброса трея CD/DVD привода
; в качестве параметра принимается буква диска или порядковый номер (по алфавиту),
; для обработки всех найденных приводов достаточно передать -1,
; по умолчанию применяется к первому найденному приводу.
;
; Возвращает количество успешно обработанных приводов,
; значение @error устанавливается равным количеству неудач,
; суммарное значение равно количеству обнаруженных приводов.

Func _CDEject ($drive = 1)
    Local $i = 1, $err = 0, $aDrives = DriveGetDrive ("CDROM")
    If IsArray ($aDrives) Then
        For $i = 1 To $aDrives [0]
            If ($drive = -1) OR ($drive = $i) OR ($drive & ':' = $aDrives [$i]) Then
                If CDTray ($aDrives [$i], "open") =0 Then $err = $err +1
            EndIf
        Next
    EndIf
    SetError ($err)
    Return $i - $err -1
EndFunc
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:38, 04-12-2006 | #95


Аватара для qeraser

Старожил


Сообщения: 387
Благодарности: 40

Профиль | Отправить PM | Цитировать


vlastan
На msfn натыкался на CD_DVD_Switcher, попробуйте.
Вот первоисточник

Вариант от amel27 прост и легок. Я бы остановился на нем.

Отправлено: 16:45, 04-12-2006 | #96


Новый участник


Сообщения: 3
Благодарности: 2

Профиль | Отправить PM | Цитировать


Чтение структуры подкаталогов для создания значения ключа OemPnPDriversPath в winnt.sif.
Надоело значение этого ключа руками переделывать (ошибаюсь часто).
Написал скрипт для этого, не знаю межет кто и делал что-то подобное.

Вот текст vb-скрипта.

Код: Выделить весь код
'Чтение аргумента коммандной строки
Set objArgs = WScript.Arguments
call readcatname (objArgs(0))
Function readcatname (folderspec)
  Dim fso, f, f1, s, sf
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set f = fso.GetFolder(folderspec)
  Set sf = f.SubFolders
  For Each f1 in sf
'Проверка каталога на наличие файлов
  Dim fsofol, fl, fo
  Set fsofol = CreateObject("Scripting.FileSystemObject")
  Set fl = fsofol.GetFolder(f1.path)
  Set fo = fl.Files
  if fo.Count = 0 Then
  else
'Проверка существования лога 
    Set fsoLogO = CreateObject("Scripting.FileSystemObject")
    if (fsoLogO.FileExists("folders.txt")) Then
    else
      fsoLogO.CreateTextFile "folders.txt"
    end if
'Запись имени каталога в файл
    Set fsoLog = fsoLogO.GetFile("folders.txt")
    Set ts = fsoLog.OpenAsTextStream(8,0)
    ts.Write f1 & ";"
    ts.Close
   end if
'Рекурсивный вызов функции
    	call readcatname (f1.path)
  Next
End function
Эта программа тупо сканирует структуру подкаталогов и пишет их имена последовательно в файл folders.txt в качестве аргумента в коммандной строке необходимо указать подкаталог который необходимо просканировать (в моем случае E:\Distrib\WiXPSP2$OEM$\$1\drivers\), а потом в блокноте с помощью поиска и замены удалить часть путей подкаталогов у меня это выглядит так E:\Distrib\WiXPSP2$OEM$\$1\ заменяем на ничего (не смог я поиск регулярных выражений корректно написать).
Внимание: программа тупая она не понимает сколько символов в названии каталога, так что проверяйте это сами.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:30, 14-12-2006 | #97


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


...тогда вот еще CMD-вариант решения проблемы построения OemPnPDriversPath:
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
:: Путь к каталогу с драйверами:
Set ROOT=E:\Distrib\WiXPSP2\$OEM$\$1\OEMDRV

PUSHD %ROOT%
For %%i In ("%ROOT%") Do If Exist %%i (Set ROOT=%%~si&Set $R=%%~nxsi) Else Exit
For /F "Delims=" %%i In ('DIR /B/S/A:D *') DO (
   Set $D=%%~si
   If Exist !$D!\*.inf Set OemPnPDriversPath=!OemPnPDriversPath!;!$R!!$D:%ROOT%=!
)

Echo %OemPnPDriversPath:~1%

Последний раз редактировалось amel27, 15-07-2009 в 12:56. Причина: проверка наличия INF, раскраска

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:04, 14-12-2006 | #98


Новый участник


Сообщения: 3
Благодарности: 2

Профиль | Отправить PM | Цитировать


Доделаный скрипт для построения OemPnPDriversPath
Теперь выдает готовую строку в файл folders.txt (переделывать ни чего не надо)
Также выполняет проверку соответствия имен каталогов формату 8.3, если не соответствует сообщит где ошибка.

Код: Выделить весь код
Set objArgs = WScript.Arguments
If objArgs.length = 0 Then
  MsgBox "Не задан каталог", 16, "Выполнение прервано"
  WScript.Quit
End If
Set fso = CreateObject("Scripting.FileSystemObject")
If  Not fso.FolderExists(objArgs(0)) Then
  MsgBox "Каталог не существует", 16, "Выполнение прервано"
  WScript.Quit
End If
    Set fsoLogO = CreateObject("Scripting.FileSystemObject")
    if (fsoLogO.FileExists("folders.txt")) Then
      Set fsoLog = fsoLogO.GetFile("folders.txt")
      fsoLog.Delete
      fsoLogO.CreateTextFile "folders.txt"
    else
      fsoLogO.CreateTextFile "folders.txt"
    end if  
Dim pfso, pf, psf, regEx
Set pfso = CreateObject("Scripting.FileSystemObject")
Set pf = pfso.GetFolder(objArgs(0))
Set psf = pf.Parentfolder
Set regEx = New RegExp
regEx.Pattern = "\\"
regEx.IgnoreCase = True
regEx.Global = True
rpatrn = regEx.Replace(psf.path, "\\")
regEx.Pattern = "\$"
rpatrn = regEx.Replace(rpatrn, "\S")
cn=0   
call readcatname (objArgs(0), rpatrn)

Function readcatname (folderspec, rpatrn)
  Dim fso, f, f1, s, sf, regEx
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set f = fso.GetFolder(folderspec)
  Set sf = f.SubFolders   
  For Each f1 in sf
  If UCase(f1.Name) <> UCase(f1.ShortName) Then 
  MsgBox "Имя каталога не соответствует формату 8.3" & Chr(13) & f1.Path & Chr(13) & f1.Name,_
  16, "Выполнение прервано"
  WScript.Quit
  End If
  Dim fsofol, fl, fo
  Set fsofol = CreateObject("Scripting.FileSystemObject")
  Set fl = fsofol.GetFolder(f1.path)
  Set fo = fl.Files
  if fo.Count = 0 Then
  else
    Set fsoLogO = CreateObject("Scripting.FileSystemObject")
    Set fsoLog = fsoLogO.GetFile("folders.txt")
    Set ts = fsoLog.OpenAsTextStream(8,0)
    Set regEx = New RegExp   
    regEx.Pattern = rpatrn & "\\"
    regEx.IgnoreCase = True
    sname = regEx.Replace(f1 , "")
    if cn = 0 Then 
      cn = 1
    else
      ts.Write ";"
    End If
    ts.Write sname
    ts.Close
    End if
  call readcatname (f1.path, rpatrn)
  Next
End function

Отправлено: 05:23, 15-12-2006 | #99


Старожил


Сообщения: 214
Благодарности: 25

Профиль | Отправить PM | Цитировать


amel27
Цитата:
Rem Выделенные для приводов буквы
SET DRV_FREE=X Y Z
Где-то когда-то на Майкрософте в КБ было, что, мол, буковка Z используется при выполнении батников ("скриптов входа") при сетевом логоне...
Правда, не помню, к каким версиям Виндов применимо...

Отправлено: 17:56, 24-12-2006 | #100



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка Windows 2000/XP/2003 » Маленькие хитрости автоустановки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочее - Маленькие скрипты на каждый день [mzd] Общий по Linux 26 09-03-2009 20:09
Прочее - Хитрости с сетью! <попытка отъесть полосу пропускания> Martion Сетевые технологии 8 11-12-2008 17:26
Разное - Хитрости Windows Vista Ydav Microsoft Windows Vista 1 05-04-2008 20:09
Internet Explorer 7 - "Советы и маленькие хитрости" OSZone News Новости и события Microsoft 3 02-04-2008 09:10
Маленькие окна браузера 4ay-nik Microsoft Windows 2000/XP 1 31-01-2007 22:25




 
Переход