PDA

Показать полную графическую версию : [решено] Открыть привод, корректно убить процесс, закрыть привод и снова убить процесс - как?


Nun-Nun
27-10-2011, 21:22
Есть такая задача: нужно открыть привод с помощью имеющегося vbs-скрипта (скрипт уже есть), корректно убить процесс wscript.exe (т.к. сам он не выгрузится, а при попытке запустить его второй раз почему-то нормально не работает), закрыть привод с помощью того же имеющегося vbs-скрипта и снова корректно убить процесс wscript.exe. Пробовал экспериментировать, но так ничего и не добился. В чём ошибка?
START "" %windir%\System32\wscript.exe Open_Close_Tray.vbs
Taskkill /im Wscript.exe /f
ECHO.
SET /p yesno="Для записи диска нажмите Y, для отказа - N или любую другую клавишу. Записать?"
if /i "%yesno%"=="Y" (GOTO :WRITEDISK) ELSE (GOTO :ENDWRITE)
GOTO :ENDWRITE
:WRITEDISK
START "" %windir%\System32\wscript.exe Open_Close_Tray.vbs
Taskkill /im Wscript.exe /f
ECHO.
ECHO Запущен процесс записи диска. Это займёт несколько минут...
ImgBurn.exe /START /ERASE YES /MODE BUILD YES /SRC /ROOTFOLDER YES "C:\Temp\My_Disk\" /VOLUMELABEL "MY_DISK" /DEST 1:0:0 /FILESYSTEM "ISO9660 + Joliet + UDF" /UDFREVISION "1.02" /SPEED 10x /COPIES 1 /EJECT YES /CLOSE
ECHO.
ECHO Запись диска завершена!
:ENDWRITE
А вот на всякий случай содержание VBS-скрипта:
Set objWMP = CreateObject("WMPlayer.OCX.7")
Set colCDs = objWMP.cdromCollection

colCDs.Item(0).Eject
MsgBox "Извлеките из привода исходный диск и вставьте чистый диск.",64,"Открыть\Закрыть DVD-привод"
colCDs.Item(0).Eject

P.S. Разумеется, параметры /DEST 1:0:0 , /SPEED 10x и т.п. в командной строке для ImgBurn-а в каждом конкретном случае могут отличаться - это понятно и здесь проблем нет.

Iska
28-10-2011, 03:57
Nun-Nun, проблема с методом «.Eject» объекта «WMPlayer.OCX.7» старая и без выворотов не решаемая.

Я бы предложил пользовать стороннюю утилиту, либо стороннюю библиотеку: VBScript: скрипты для открытия-закрытия лотка CD-ROM (http://forum.script-coding.com/viewtopic.php?id=56).

Можете ещё попробовать поиграться с IMAPI:
Option Explicit

Dim objMsftDiscMaster
Dim objDiscRecorder
Dim uniqueId

Set objMsftDiscMaster = WScript.CreateObject("IMAPI2.MsftDiscMaster2")
Set objDiscRecorder = WScript.CreateObject("IMAPI2.MsftDiscRecorder2")

uniqueId = objMsftDiscMaster.Item(0)

objDiscRecorder.InitializeDiscRecorder uniqueId
objDiscRecorder.EjectMedia

MsgBox "***"

objDiscRecorder.CloseTray

Set objDiscRecorder = Nothing
Set objMsftDiscMaster = Nothing

WScript.Quit 0

Но сие работает не со всеми типами подключений устройств.

Nun-Nun
29-10-2011, 22:21
Я бы предложил пользовать стороннюю утилиту, либо стороннюю библиотеку: vbscript: скрипты для открытия-закрытия лотка CD-ROM.»
Скачал, но пока ещё не пробовал. Хотя, судя по содержанию скриптов, есть там одно неудобство: букву привода нужно прописывать вручную, а она на разных компах далеко не всегда одинакова. Вот если бы эти скрипты определяли нужный привод хотя бы по метке вставленного диска... :sorry:

У других сторонних утилит, например, от NirSoft, - присутствует такое же неудобство с буквой диска. :(

Можете ещё попробовать поиграться с IMAPI...»
ОК, попробую.

Iska
29-10-2011, 23:55
Nun-Nun, как раз определить привод по метке диска не проблема.

Nun-Nun
30-10-2011, 01:05
как раз определить привод по метке диска не проблема. »
Только те VBS-скрипты этого не делают, а я в них не разбираюсь, чтобы поправить в нужную сторону. :(

Nun-Nun
30-10-2011, 12:59
Iska,

Огромнейшее спасибо за скрипт для IMAPI ! Попробовал - прекрасно работает!
Думаю, тему можно считать решённой!

Iska
30-10-2011, 13:53
Думаю, тему можно считать решённой! »
Nun-Nun, только отчасти. У меня, по крайней мере, IMAPI не работает с приводами на внешних контроллерах, а также на контроллерах, не входящих непосредственно в южный мост чипсета. Т.е., опять же — у меня, IMAPI отказался работать с приводами, подключёнными к наличествующим на материнской плате контроллерам «Silicon Image SiI 3132 SATALink Controller» и «ITE IT8211 ATA/ATAPI Controller». Только с «родным» для чипсета ICH7R («Intel(R) ICH7R/DH SATA RAID Controller»).

Nun-Nun
31-10-2011, 13:49
У меня, по крайней мере, IMAPI не работает с приводами на внешних контроллерах, а также на контроллерах, не входящих непосредственно в южный мост чипсета. Т.е., опять же — у меня, IMAPI отказался работать с приводами, подключёнными к наличествующим на материнской плате контроллерам «Silicon Image SiI 3132 SATALink Controller» и «ITE IT8211 ATA/ATAPI Controller». Только с «родным» для чипсета ICH7R («Intel(R) ICH7R/DH SATA RAID Controller»). »
Ой, блин, а ведь и правда! На одном компе прошло нормально, а на другом на базе матери ASUS M4A87TD EVO (чипсет AMD870\SB850+JMicronJMB361) выдало вот такое, хотя в сценарий вписал только текст сообщения и ничего больше не трогал :(:
Сценарий: Open_Close_Tray.vbs
Строка: 12
Символ: 1
Ошибка: Неопознанная ошибка
Код: 80004005
Источник: (Full)
Это преодолеть возможно?

Iska
31-10-2011, 15:25
Это преодолеть возможно? »
Года два назад сие, вроде как, ничем не лечилось. Как нынче — не знаю.

Буду рад услышать обратное.




© OSzone.net 2001-2012