Работа с файлами-образами и виртуальными дисками из ТС

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Iori писал(а):У меня такой ошибки нет
А, значит, эта прога его в Manual ставит, молодец прога. 8)
Iori писал(а):Значит мусор в системе остаётся.
Конечно.
Iori писал(а):Буду очень рад :D >>>
К сожалению как вы уже знаете, WinCDemu только работает с DVD образами.
:?:
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

А, значит, эта прога его в Manual ставит, молодец прога
Да system explorer показывает как Manual.
Конечно.
С этим надо что то делать :shock:

Я имею в виду то что osfmount и imdisk могут монтировать флопи, дисковые, и другие образы, а WinCDemu может монтировать только udf образы.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Iori писал(а):С этим надо что то делать
Часть уже показал. Остальное позже, когда драйверную часть в скриптах отлажу на максимум.
Iori писал(а):Я имею в виду
Речь не об этом. См. выделенное. Чему радоваться, если я писал про WinCDEmu?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

Остальное позже, когда драйверную часть в скриптах отлажу на максимум.
Ладно будем ждать :)
Чему радоваться, если я писал про WinCDEmu?
Понятно.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Iori
По личным причинам выкладка затянулась. Не сказать, что особо отлаживал (знаю, куда копать, но со временем не очень). Выложу, что есть.

[cut="WinCDEmu.vbs"]

Код: Выделить всё

'•••••••••••••••••••••••• VBS •••••••••••••••••••••••
' Смонтировать образ диска под курсором с расширением
' ISO, CUE, NRG, MDS/MDF, CCD, IMG c помощью WinCDEmu
'
' Условие: расположение файлов программы как в архиве
'
' Параметры: 1) <отмонтировать всё/монтировать:  0/1>
'            2) <запуск драйвера при старте ОС:  0/1>
'            3) <свободная буква c начала/конца: 0/1>
'            4) %V (либо полный путь к файлу-образу)
'
' Примеры:  0 0  |  1 0 0 %V
'
Option Explicit
'••••••• Путь к папке с утилитой и драйверами •••••••
Const Path = "%COMMANDER_PATH%\Utils\WinCDEmu"
'••••••••••••••••••••••••••••••• Автор: Flasher © •••

Dim A, T, Title, WSH, FSO, S1, DN, P, X64, Dr, Program, F, S, S2, WMI, Mode, Q, M
Title = " Монтирование образа на виртуальный диск     "
Set A = WScript.Arguments : T = 1 : If A.Count = 0 Then T = 0 : Msg(25)
If A(0) = 1 And A.Count <> 4 Then T = 0 : Msg(26)
If A(0) = 0 Then Title = " Отключение годных виртуальных дисков      "
S1 = "е" : Set WSH = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
If A(0) = 1 Then If InStr("|ISO|CUE|NRG|MDS|MDF|CCD|IMG|",_
"|" & UCase(FSO.GetExtensionName(A(3))) & "|") = 0 Then T = 0 : Msg(27)
If WSH.Environment("System")("PROCESSOR_ARCHITECTURE") <> "x86" Then X64 = "\64"
DN = "BazisPortableCDBus" : P = WSH.ExpandEnvironmentStrings(Path)
Dr = FSO.BuildPath(P & X64, DN & ".sys")
Program = FSO.BuildPath(P, "PortableWinCDEmu.exe")
For Each F in Array(Program, Dr)
  If Not FSO.FileExists(F) Then S = S & vbCr & F
Next : If InStrRev(S, vbCr) > 1 Then S1 = "ю" : S2 = "ы:"
If Not IsEmpty(S) Then  T = 0 : Msg(28)
WMI = "winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2"
If A(1) Then Mode = "Automatic" Else Mode = "Manual"
Set Q = GetObject(WMI).ExecQuery("Select * from Win32_SystemDriver WHERE Name='"&DN&"'")
If Q.Count Then
  For Each Dr in Q
    If Dr.Status = "Degraded" Then Msg(16)
    If Dr.Started = False Then Dr.StartService
  Next : Set Q = Nothing
Else
  Dim D, SDriver : D = Dr
  Set SDriver = GetObject(WMI & ":Win32_SystemDriver")
    Dr = SDriver.Create(DN, DN, D, 2, 0, Mode)
  If Dr = 23 Then
    WSH.Run """" & Program & """ /uninstall", 0, True
    SDriver.Delete(DN)
    Dr = SDriver.Create(DN, DN, D, 2, 0, Mode) : Msg(Dr)
  Else Msg(Dr) End If
  If (Dr = 0 Or Dr = 6 Or Dr = 14 Or Dr = 24) And Dr <> 10 Then
    With GetObject(WMI & ":Win32_SystemDriver.Name='" & DN & "'")
      If .StartMode = "Disabled" Then .ChangeStartMode = Mode
      Dr = .StartService : Msg(Dr)
    End With
  End If
End If
If A(0) Then
  D = "DEFGHIJKLMNOPQRSTUVWXYZ"
  For Each Dr In FSO.Drives : D = Replace(D, Dr.DriveLetter, "") : Next
  If A(2) Then Dr = " " & Right(D, 1) & ":" Else Dr = " " & Left(D, 1) & ":"
  WSH.Run """" & Program & """ """ & A(3) & """" & Dr & " /wait", 0, True
  WSH.Popup "Образ под курсором смонтирован на диск " & Dr & " !", 2, Title
Else
  WSH.Run """" & Program & """ /unmountall", 0, True
  WSH.Popup "Виртуальные диски отключены!", 2, Title
End If : Quit

Sub Msg(D)
  Select Case D
    Case  1 M = "Запрос на создание службы драйвера не поддерживается системой."
    Case  2 M = "Активный пользователь не имеет необходимых прав доступа!"
    Case  6 M = "Служба драйвера не была запущена."
    Case  7 M = "Служба драйвера не ответила своевременно на начало запроса."
    Case  8 M = "Неизвестная ошибка при запуске службы драйвера."
    Case 11 M = "База данных заблокирована для добавления новых служб."
    Case 12 M = "Зависимости, на которые опирается драйвер, были удалены из системы."
    Case 13 M = "Драйверу не удается найти зависимую службу."
    Case 14 M = "Драйвер был отключен от системы."
    Case 16 M = "Драйвер удаляется из системы. Требуется её перезапуск!"
    Case 17 M = "Нет потока выполнения для службы драйвера."
    Case 22 M = "Учетная запись недействительна или не имеет прав на запуск службы."
    Case 24 M = "В настоящий момент служба приостановлена."
    Case 25 M = "Укажите требуемые параметры!"
    Case 26 M = "Необходимо указать 4 параметра!"
    Case 27 M = "Данный тип файла не поддерживается!"
    Case 28 M = "Отсутству" & S1 & "т файл" & S2 & S
  End Select : If M <> "" Then MsgBox M, 4144, Title : Quit
End Sub : Sub Quit : If T Then WSH.Run "wmic exit", 0 End If : WScript.Quit : End Sub
[/cut]Скачать архив WinCDEmu
autorun.cfg писал(а):# Команды при завершении процесса ТС:
Pragma AutorunFinalizeSection
ShellExec /SW_HIDE /WAIT '%COMMANDER_PATH%\Utils\WinCDEmu\PortableWinCDEmu.exe' /unmountall
ShellExec /SW_HIDE /WAIT '%COMMANDER_PATH%\Utils\WinCDEmu\PortableWinCDEmu.exe' /uninstall
ShellExec /SW_HIDE reg 'delete HKLM\SYSTEM\CurrentControlSet\Services\BazisPortableCDBus /f'
# Если для драйвера будет открыт дескриптор др. процессом, то след. команда только пометит драйвер на удаление:
#ShellExec /SW_HIDE %comspec% '/c sc stop BazisPortableCDBus && sc delete BazisPortableCDBus'
[cut="OSFMount.vbs"]

Код: Выделить всё

'•••••••••••••••••••••••••••••••• VBS •••••••••••••••••••••••••••••••••
' Назначение: Смонтировать образ диска под курсором на виртуальный диск
'           Отмонтировать все подключённые программой виртуальные диски
'
' Поддерживаемые форматы:
'  00n, AFD, AFF, AFM, BIN, DD, E01, IMG, ISO, NRG, S01, SDI, VHD, VMDK
'
' Условие: в папке программы должны находиться OSFMount\ и OSFMount64\,
'          в каждой из которых OSFMount.com, OSFMount.exe, OSFMount.sys
'
' Параметры: 1) <отмонтировать всё/монтировать:  0/1>
'            2) <свободная буква c начала/конца: 0/1>
'            3) %V (либо полный путь к файлу-образу)
'
' Примеры:  0  |  1 1 %V
'
Option Explicit
'•••••••••••••••••••••• Путь к папке с OSFMount •••••••••••••••••••••••
Const Path = "%COMMANDER_PATH%\Utils\OSFMount"
'••••••••••••••••••••••••••••••••••••••••••••••••• Автор: Flasher © •••

Dim A, Title, WSH, FSO, S1, SF, DN, P, Dr, OCom, F, S, S2, WMI, Mode, M
Title = " Монтирование образа на виртуальный диск     "
Set A = WScript.Arguments : If A.Count = 0 Then Msg(1)
If A(0) = 1 And A.Count <> 3 Then Msg(2)
If A(0) = 0 Then Title = " Отключение годных виртуальных дисков      "
S1 = "е" : Set WSH = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
If A(0) = 1 Then _
If InStr("|00N|AFD|AFF|AFM|BIN|DD|E01|IMG|ISO|NRG|S01|SDI|VHD|VMDK|",_
"|" & UCase(FSO.GetExtensionName(A(2))) & "|") = 0 Then Msg(3)
If WSH.Environment("System")("PROCESSOR_ARCHITECTURE") <> "x86" Then SF = 64
P = FSO.BuildPath(WSH.ExpandEnvironmentStrings(Path), "OSFMount" & SF) & ""
DN = "OSFMount" : OCom = P & DN & ".com"
For Each F in Array(P & DN & ".exe", OCom, P & DN & ".sys")
  If Not FSO.FileExists(F) Then S = S & vbCr & F
Next : If InStrRev(S, vbCr) > 1 Then S1 = "ю" : S2 = "ы:"
If Not IsEmpty(S) Then Msg(4)
If A(0) Then
  Dim D : D = "DEFGHIJKLMNOPQRSTUVWXYZ"
  For Each Dr In FSO.Drives : D = Replace(D, Dr.DriveLetter, "") : Next
  If A(1) Then Dr = " " & Right(D, 1) & ":" Else Dr = " " & Left(D, 1) & ":"
  WSH.Run """" & OCom & """ -a -t file -f """ & A(2) & """ -m " & Dr, 0, True
  WSH.Popup "Образ под курсором смонтирован на диск " & Dr & " !", 2, Title
Else
  For Each Dr In FSO.Drives
    If WSH.Run("""" & Ocom & """ -l -m " & Dr, 0, True) = 0 Then _
       WSH.Run """" & Ocom & """ -D -m " & Dr, 0, True
  Next : WSH.Popup "Виртуальные диски отключены!", 2, Title
End If

Sub Msg(D)
  Select Case D
  	Case 1 M = "Укажите требуемые параметры!"
  	Case 2 M = "Необходимо указать 3 параметра!"
  	Case 3 M = "Данный тип файла не поддерживается!"
  	Case 4 M = "Отсутству" & S1 & "т файл" & S2 & S
  End Select : MsgBox M, 4144, Title : WScript.Quit
End Sub
[/cut]
autorun.cfg писал(а):# Команды при завершении процесса ТС:
Pragma AutorunFinalizeSection
ShellExec /WAIT '%COMMANDER_PATH%\Scripts\OSFMount.vbs' 0
ShellExec /SW_HIDE reg 'delete HKLM\SYSTEM\CurrentControlSet\Services\OSFMount /f'
# Если для драйвера будет открыт дескриптор др. процессом, то след. команда только пометит драйвер на удаление:
#ShellExec /SW_HIDE %comspec% '/c sc stop OSFMount && sc delete OSFMount'
Последний раз редактировалось Flasher Вс апр 03, 2016 19:41, всего редактировалось 3 раза.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

Flasher

Огромное спасибо :)
Сейчас приболел. Сил даже нет открыть ТС.
Как отойду, буду тестировать.
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

Flasher

Наконец то добрался до твоего творчества.
Всё отлично работает :) Вроде никаких ошибок пока не нашёл.
Проверял только OSF Mount так как он мне больше подходит.

Огромное спасибо . :)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Iori
Пожалуйста. А вообще желательно проверить и первый скрипт. WinCDEmu в отличии от OSFMount поддерживает CUE, MDS/MDF, CCD.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

Flasher
WinCDEmu в отличии от OSFMount поддерживает CUE, MDS/MDF, CCD
Эту деталь не заметил. Тогда в комбинации с OSFmount, получается очень мощный инструмент.

Протестировал скрипт для WinCDemu. Скрипт показывает что исо имедж монтировался на букву Z:. Но в проводнике ничего не монтировано.
Использовал такую комбинацию - 1 0 1 %V

А зачем нам нужен запуск драйвера при старте ОС ?
Почему в состав входит только х32 битный BazisPortableCDBus.sys, а не оба?

Если что посоветуешь, то только смогу проверить когда вернусь домой. На работе нет админ прав :(.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Iori писал(а):А зачем нам нужен запуск драйвера при старте ОС ?
Кому нам? Есть же и другие, кроме "нас".
Iori писал(а):Почему в состав входит только х32 битный BazisPortableCDBus.sys, а не оба?
А у меня просто нет x64. Выложишь, добавлю. По всей видимости проблема с отсутствием диска отсюда и вытекает.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

По всей видимости проблема с отсутствием диска отсюда и вытекает.
Как понимать отсутствие диска?
Кому нам? Есть же и другие, кроме "нас".
А, понятно тогда.

x64 выложу как приду домой. :)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Iori писал(а):Как понимать отсутствие диска?
>>
Iori писал(а):Но в проводнике ничего не монтировано.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

Flasher

И как это решается?
Сам же WincdEmu Portable монтирует всё нормально.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Iori
Подключением драйвера соотв. системе битности.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

Flasher

Вот х64 драйвер.
http://www.datafilehost.com/d/536f8105

Убери галочку где: Download with Secured Download manager
Ответить