Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Открыть привод, корректно убить процесс, закрыть привод и снова убить процесс - как? (http://forum.oszone.net/showthread.php?t=219074)

Nun-Nun 27-10-2011 21:22 1783262

Открыть привод, корректно убить процесс, закрыть привод и снова убить процесс - как?
 
Есть такая задача: нужно открыть привод с помощью имеющегося 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 1783404

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

Я бы предложил пользовать стороннюю утилиту, либо стороннюю библиотеку: vbscript: скрипты для открытия-закрытия лотка CD-ROM.

Можете ещё попробовать поиграться с 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 1784603

Цитата:

Цитата Iska
Я бы предложил пользовать стороннюю утилиту, либо стороннюю библиотеку: vbscript: скрипты для открытия-закрытия лотка CD-ROM.»

Скачал, но пока ещё не пробовал. Хотя, судя по содержанию скриптов, есть там одно неудобство: букву привода нужно прописывать вручную, а она на разных компах далеко не всегда одинакова. Вот если бы эти скрипты определяли нужный привод хотя бы по метке вставленного диска... :sorry:

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

Цитата:

Цитата Iska
Можете ещё попробовать поиграться с IMAPI...»

ОК, попробую.

Iska 29-10-2011 23:55 1784648

Nun-Nun, как раз определить привод по метке диска не проблема.

Nun-Nun 30-10-2011 01:05 1784698

Цитата:

Цитата Iska
как раз определить привод по метке диска не проблема. »

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

Nun-Nun 30-10-2011 12:59 1784857

Iska,

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

Iska 30-10-2011 13:53 1784902

Цитата:

Цитата Nun-Nun
Думаю, тему можно считать решённой! »

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 1785679

Цитата:

Цитата Iska
У меня, по крайней мере, 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 1785749

Цитата:

Цитата Nun-Nun
Это преодолеть возможно? »

Года два назад сие, вроде как, ничем не лечилось. Как нынче — не знаю.

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


Время: 19:36.

Время: 19:36.
© OSzone.net 2001-