А зачем их удалять? Разве Service Pack не разрулит всё как надо?01.09.02 10:00 Число просмотров: 1236 Автор: HandleX <Александр М.> Статус: The Elderman
У кого нет возможности отката хотфиксов это не грозит, можете не читать.
Кого достало удалять их через appwiz.cpl и каждый раз перегружаться, и, кстати, их может быть установлено 40 - 50 :-)), могу предложить такой вариант:
1. Берем список энтих самых хотфиксов c MS:
Я делал так: брал лист хотфиксов с M$, в экселе редактировал, выгружал в текстовый файл (конечно в кмдэшник можно добавить все руками, но это на любителя ), получалось примерно следующее:
Q265003 Windows 2000 Overwrites or Damages an OS/2 Boot Manager Partition
Q265365 FRS Creates Unneeded Folders in DFS Root Alternates
Q265509 Ntldr Cannot Load Fragmented System Hive
Q266247 Special Function Keys May Not Work on Dell Laptop Computers
Q266251 Memory Dump Stops When the PAE Option Is Enabled
Q266647 Drive Letters Automatically Assigned to Unrecognizable Partitions
....................................
---
Открывал этот текстовик ещё раз в эксэле ( с разделителями фиксированной ширины, чтоб убрать описание хотфикса и оставить только его номер, после номера проставлял "D", как признак) и сохранял в текстовике почищенный файл
получалось вот что:
Q264824 D
" " D
Q265003 D
" " D
Q265365 D
" " D
Q265509 D
" " D
Q266247 D
" " D
Q266251 D
" " D
Q266647 D
" " D
Q266704 D
" " D
Q266710 D
" " D
---
после в текстовом редакторе заменял
все
Q
--- на :
cd C:\WINNT%\$NtUninstall
---
все
D
---
на
$
---
и оставшиеся
" "$
---
на
hotfix.exe -y -m -z %1
---
Получался батник такого содержания:
@echo off
echo "UnInstalling Complex Microsoft Post SP2 HotFix (x86) at 30.09.2001 by babay for Windows 2000 (EN)"
echo --------------------------------------------------------------------------------
echo press any key to continue or Ctrl+C for abort uninstallation...
pause > NUL
cd Q276471$
hotfix.exe -y -m -z %1
cd C:\WINNT%\$NtUninstallQ281767$
hotfix.exe -y -m -z %1
cd C:\WINNT%\$NtUninstallQ282784$
hotfix.exe -y -m -z %1
cd C:\WINNT%\$NtUninstallQ285156$
hotfix.exe -y -m -z %1
cd C:\WINNT%\$NtUninstallQ285851$
hotfix.exe -y -m -z %1
cd C:\WINNT%\$NtUninstallQ285985$
hotfix.exe -y -m -z %1
cd C:\WINNT%\$NtUninstallQ286818$
hotfix.exe -y -m -z %1
cd C:\WINNT%\$NtUninstallQ287397$
hotfix.exe -y -m -z %1
cd C:\WINNT%\$NtUninstallQ293826$
hotfix.exe -y -m -z %1
---
Перегружаем тачку и можно ставить сервиспак.
Вот вроде и всё :-))
З.Ы. Если есть нормально отформатированный список фиксов всё намного проще, а если их установлено 6 - 7 штук и подавно, но это был не мой случай, так что может кому вся эта моя писанина и пригодится.
Не легче ли из списка:
Q265365 FRS Creates Unneeded Folders in DFS Root Alternates
Q265509 Ntldr Cannot Load Fragmented System Hive
Q266247 Special Function Keys May Not Work on Dell Laptop Computers
вырезать первый столбец в Ворде (держать Alt при выделении мышкой), потом заменить в нем символ перевода строки на пробел. Получится строка:
Q265365 Q265509 Q266247...
Дальше:
for %x in (Q265365 Q265509 Q266247...) do UnHotFix.bat %x
UnHotFix.bat - батник из 2-х строк (cd и вызов hotfix.exe)
Не корысти для, а токма чтоб отформатировать html доки с M$ ;-))), а на счет батника - это кому как01.09.02 22:09 Автор: babay <Andrey Babkin> Статус: Elderman
а на счет батника - это кому как удобнее, я просто привык так, вот и всё.
Но сейчас нормальный скрипт напишу, всё равно сижу - скучаю, без этих жреновых подгрузок номеров хомфиксов с M$
Ну вот собственно скрипт (внутри)03.09.02 00:51 Автор: babay <Andrey Babkin> Статус: Elderman Отредактировано 03.09.02 07:13 Количество правок: 3
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
File: delhfs.wsf
Author: Andrey Babkin
-->
<job id="Remove hotfixes">
<?job error="false" debug="true" ?>
<script language="JScript">
<![CDATA[
]]>
</script>
<script language="VBScript">
<![CDATA[
Option Explicit
Dim Message, Title
Dim WshShell, objEnv, fso, oDirs, oFolders, oFolder, oSubFolders, wsh
Dim result
Dim ArrCurrDirNumbers
Dim counter, errCode
Dim ArrCurrDir
Const path = "%WINDIR%"
Const patrn = "\$NtUninstallQ\d{6}\$"
Set WshShell = CreateObject("Wscript.Shell")
Set objEnv = WshShell.Environment("Process")
Set wsh = WScript.CreateObject("WScript.Shell")
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set oFolders = fso.GetFolder(wsh.ExpandEnvironmentStrings(path))
Set oSubFolders = oFolders.SubFolders
Title = "WSH program :" & WScript.ScriptName & " by Andrey Babkin"
For Each oFolder In oSubFolders
oDirs = oDirs & oFolder.Name
Next
ArrCurrDir = RegExpTest(patrn, oDirs)
Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches ' Create variable.
Dim retStr ' Result
Dim i
Dim aItems()
ArrCurrDirNumbers = 0
Set regEx = New RegExp ' Create a regular expression.
regEx.Pattern = patrn ' Set pattern.
regEx.IgnoreCase = True ' Set case insensitivity.
regEx.Global = True ' Set global applicability.
Set Matches = regEx.Execute(strng) ' Execute search.
i = 1
For Each Match In Matches ' Iterate Matches collection.
ReDim Preserve aItems(i)
aItems(i-1) = Match.Value
RetStr = RetStr & "Installed Hotfix :'" & Match.Value & "'." & vbCrLf
i = i + 1
Next
counter = counter + 1
If counter = 1 Then
RegExpTest = aItems
Else
RegExpTest = retStr ' Return result.
i = i - 1
ArrCurrDirNumbers = i
End If
End Function
Message = RegExpTest(patrn, oDirs) & vbCrLf & vbCrLf &_
"Automaticaly Uninstall All hotfix ?"& vbCrLf &_
"Note:To manual uninstall hotfix click """"No"""" "
result = MsgBox (Message, vbYesNoCancel + vbQuestion, Title)
Dim Text1, Text2, Text3, Text4, Text5
Text1 = "Click ""Ok"" to delete All hotfix"
Text2 = "Deleting hotfix Done." & vbCrLf &" Reboot System !"
Text3 = "Delete These hotfix : "
Text4 = "Deleting these HF Done !"
Text5 = "Bye !!!"
Dim n
n = 0
On Error Resume Next
Dim oFilePath
If Err.Number <> 0 Then
MsgBox "Value doesn't exist"
WScript.Quit
End If
Select Case result
Case vbYes
result = MsgBox (Text1, vbOkCancel + vbInformation, Title)
If result = vbOk Then
Do While n < ArrCurrDirNumbers
oFilePath = oFolders & "\" & ArrCurrDir(n) & "\hotfix.exe /y /m /z"
If (Not fso.FileExists("oFilePath")) Then
errCode = WshShell.Run(oFilePath, 1, True)
WScript.Echo "Error code received: ", errCode
End if
n = n + 1
Loop
WScript.Echo Text2
end If
Case vbNo
Dim counter1
Do While n < ArrCurrDirNumbers
oFilePath = oFolders & "\" & ArrCurrDir(n) & "\hotfix.exe /y /m /z"
result = MsgBox (Text3 & Left(Right(ArrCurrDir(n),7),6) & " ?", vbOkCancel + vbQuestion, Title)
If result = vbOk Then
If (Not fso.FileExists("oFilePath")) Then
errCode = WshShell.Run(oFilePath, 1, True)
WScript.Echo "Error code received: ", errCode
Counter1=Counter1 + 1
WScript.Echo Text4
End If
end If
n = n + 1
Loop
If Counter1 > 0 Then
WScript.Echo Text2
Else
WScript.Echo Text5
End If
Case 2
WScript.Echo Text5
End Select
]]>
</script>
</job>
---
А зачем их удалять? Разве Service Pack не разрулит всё как надо?01.09.02 10:00 Автор: HandleX <Александр М.> Статус: The Elderman
дело в том что даже в форме заказа фикса микрософт прежупреждает о том, что сервиспак может не встать или работать некорректно поверх хотфикса.
Да и потом - береженого бох бережет, если уж они совсем недавно исправили ошибку создания программой hotfix.exe файлов в папке %systemroot%\system32\dllcache с атрибутами read only, из чего этого следует наверно понятно ?
Да и собственно софтина update.exe отсутствием глюкавости не отличается, в одном только SP3 в неё внесли 6 - 7 исправлений.
Сам столкнулся с ситуевиной когда после установки сервиспака оставались записи о некоторых не дэинсталираванных хотфиксах, мне не понравилась ситуация - решил ставить на вычищенную тачку, вот собственно в чем дело было.
К разговору о hotfix-ах01.09.02 19:17 Автор: mc Статус: Незарегистрированный пользователь
MS предлагает программулину Baseline Analizer, которая тестит на предмет наличия/отсутствия обновлений и предлагает свои услуги по их установке. И в том числе позволяет тестить машины домена с сервера. Но вот незадача, при тестировании сети говорит не нашла никого и при этом указывает ип и полное имя. Описание все посвещено кнопкам, ничего конкретного. Кто-нибудь пробовал такую прогу?