PDA

Показать полную графическую версию : [решено] определение CD/DVD-привода по маркерному файлу WIN51IP


vosya
22-08-2010, 08:23
прошу помочь с написанием скрипта VBS

(изначально скрипт помещается в папку автозагрузки и срабатывает при входе в систему (Win XP)

надо чтобы скрипт определил CD/DVD-привод содержащий диск с маркерным файлом WIN51IP
если файл WIN51IP обнаружен, то выдал сообщение "Вы хотите установить обновление?" "ДА" "НЕТ"

при нажатии "ДА" скрипт должен в фоновом режиме (скрытно) запустить файл
X:\I386\UPDATE\RUNONCE.bat (где "Х" - CD/DVD-привод), при нажатии "НЕТ" - закрытие окна

если нужного файла WIN51IP в CD/DVD-приводе не имеется, то скрипт выдает сообщение
"Вставьте диск 1","ОК" (при этом при нажатии "ОК" в отсутствие диска скрипт
вновь проверяет приводы и ищет маркерный файл до тех пор пока не появится
нужный CD/DVD-диск)

после выполненя X:\I386\UPDATE\12345.bat, срипт должен выдать сообщение "Требуется перезагрузка компьютера", "ОК"
после нажатия "ОК" - перезагрузка и самоудаление скрипта

amel27
22-08-2010, 11:33
Set Shell = WScript.CreateObject("WScript.Shell")

Do
Drive = GetDriveByFyle("WIN51IP")
If Len(Drive)>0 Then Exit Do
MsgBox "Вставьте диск 1",vbOKOnly+vbExclamation+vbApplicationModal,"Пауза"
Loop

MsgRet = MsgBox("Вы хотите установить обновление?",vbOKCancel+vbQuestion+vbApplicationModal,"Пауза")
If MsgRet=2 Then WScript.Quit 2

Shell.Run "CMD /C "& Drive &":\I386\UPDATE\RUNONCE.bat", 0, vbTrue
MsgBox "Сейчас будет произведена перезагрузка компьютера!",vbOKOnly+vbExclamation+vbApplicationModal,"Пауза"

For Each OS In GetObject ("winmgmts:{(Shutdown)}//./root/cimv2").InstancesOf("Win32_OperatingSystem")
Set Security = OS.Security_
Set PrivObj = Security.Privileges
PrivObj.Add(18)
OS.Win32ShutDown 6
Next

Function GetDriveByFyle(file)
Dim fso, d, dc
Set fso = CreateObject("Scripting.FileSystemObject")
Set dc = fso.Drives
For Each d in dc
If d.DriveType = 4 Then
If fso.FileExists(d.DriveLetter &":\"& file) Then
GetDriveByFyle = d.DriveLetter
Exit Function
End If
End If
Next
GetDriveByFyle = ""
End Function

deepred
22-08-2010, 12:12
vosya,

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set colDrives = objFSO.Drives: InStat = False
DO: For Each objDrive in colDrives
IF objDrive.DriveType = 4 And objDrive.IsReady Then
Install(objDrive.DriveLetter): InStat = True
End IF
Next

IF Not InStat Then Wscript.Echo "Вставьте Диск"
Loop

Function Install(Strmarker)
strSourceFile = Strmarker & ":\WIN51IP"
Set objFile = objFSO.GetFile(strSourceFile)
If objFSO.FileExists(objFile) Then
MsgRetval = MsgBox("Установить обновление?", _
vbOKCancel+vbQuestion+vbApplicationModal, _
"Установка...")
If MsgRetval=2 Then WScript.Quit (2)
WSHShellShell.Run "cmd /c "& Strmarker &":\i386\update\runonce.bat", 0, True
WSHShellShell.Run "cmd /c shutdown /r /t 10", 0, False
FSO.DeleteFile WScript.ScriptFullName, 0
Wscript.Quit (0)
Else
InStat = False
End if
End Function

PS : я вижу, Amel27, Вы меня уже опередили, не обновил страничку вовремя..., ну ладно, наши способы несколько отличны...
PPS : уточняю по поводу второго сообщения, предшествующего перезагрузке - команда "shutdown" выдаст это предупреждение самостоятельно!

vosya
22-08-2010, 15:36
amel27,
deepred,

ребята! большое человеческое спасибо за помощь!
:oszone:




© OSzone.net 2001-2012