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

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

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

Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

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

Сообщение Iori »

Imdisk Toolkit нахидится сдесь:
http://reboot.pro/files/file/284-imdisk-toolkit/

Пытаюсь создать две кнопки в командере.
Одна для mount образов и инсталляции драйвера.
Вторая для unmount образов и деинсталляции драйвера.

Инсталляция драйвера происходит через install.cmd
Деинсталляция драйвера происходит через uninstall_imdisk.cmd

Но как сделать что-бы кнопка установила драйвер, а затем монтировала имедж под курсором, я пока не осилил.

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

Сообщение Flasher »

Iori
Зачем перед каждым монтированием пытаться установить драйвер? Это нужно делать единожды при запуске ТС. См. обсуждение.
Я, например, монтирую скриптом типа 1, 2 или кнопкой
Сomm: vd_filedisk.exe
Par's: /mount 2 %V /cd /ro X:
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Iori
Я извиняюсь, а зачем ImDisk Toolkit (это просто GUI, которому ещё и необходим .NET Framework), если по сути вы пользуетесь голым ImDisk и этого вполне достаточно?

В кнопке с install.cmd можно дописать параметры "%P%N" (без кавычек) - файл под курсором, в install.cmd дописать команду монтирование переданного файла, используя "%1".
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

Flasher
Зачем перед каждым монтированием пытаться установить драйвер?
Удобно когда работаешь на чужом компютере и надо монтировать диск.
Деинсталлация, что-бы не оставлять следы на чужой системе.
Это нужно делать единожды при запуске ТС
Например через этот плагин:
http://www.ghisler.ch/board/viewtopic.php?t=32427

Но, после закрытия ТС, драйвер же не деинсталлируется из системы.

Можно в Сomm строке запустить два приложения?
Comm: file.cmd & imdisk.exe
Par's: -a -f C:\my_disk.ima -m R: -b 32256
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

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

Сообщение Flasher »

Iori писал(а):Деинсталлация, что-бы не оставлять следы на чужой системе.
Но, после закрытия ТС, драйвер же не деинсталлируется из системы.
Продолжение обсуждения. :wink:
Iori писал(а):Например через этот плагин:
Есть своя тема по ссылке выше.
Iori писал(а):Можно в Сomm строке запустить два приложения?
Можно, конечно. Через %Comspec% /c спереди, а объединять через && для ожидания успешного выполнения первой команды.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

Skif_off
Указанный вами плагин может запустить любую команду и при закрытии TC.
Это я не знал. Но всё ровно через батник удобнее будет. Так как не всегда нужно что-бы драйвер устанавливался.

Голый ImDisk пойдёт.
в install.cmd дописать команду монтирование переданного файла, используя "%1".
Я в батниках не силён, попробую и отпишусь.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение Iori »

Flasher
Можно, конечно. Через %Comspec% /c спереди, а объединять через && для ожидания успешного выполнения первой команды.
По идеи кнопка будет такая:

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

Comm: %Comspec% /c "%commander_path%\utilities\imdisk\install.cmd" &&  "%commander_path%\utilities\imdisk\imdisk.exe"
Parammeters: -a -f "%P%N" -m R:
Вот сам батник.

[cut]

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

@echo off

setlocal

title ImDisk Virtual Disk Driver setup

echo ImDisk Virtual Disk Driver setup
echo.

set IMDISK_TOTAL_DEVICES=0
set IMDISK_VALID_DEVICES=0
set IMDISK_PENDING_REMOVAL_DEVICES=0

if exist "%SystemRoot%\system32\imdisk.exe" (
  for /f %%a in ('imdisk -l -n ^| find /v /i ^"No^"') do call :addline "%%a"
)

if %IMDISK_VALID_DEVICES% GTR 0 (
  echo Number of existing ImDisk virtual disks: %IMDISK_VALID_DEVICES%
  echo.
  if "%IMDISK_SILENT_SETUP%" == "1" (
    echo Please dismount all existing ImDisk virtual disks before upgrade!
    echo.
  ) else (
    msgboxw "Please dismount all existing ImDisk virtual disks before upgrade!" 16 "ImDisk Virtual Disk Driver setup"
    start control imdisk.cpl
  )
  endlocal
  goto :eof
)

echo Number of existing ImDisk virtual disks: %IMDISK_TOTAL_DEVICES%
echo.
if %IMDISK_TOTAL_DEVICES% == 0 (
  net stop imdsksvc
  net stop awealloc
  net stop imdisk
  if exist "%SystemRoot%\system32\taskkill.exe" taskkill /F /IM imdsksvc.exe
)

pushd "%~dp0"
rundll32 setupapi.dll,InstallHinfSection DefaultInstall 132 .\imdisk.inf
popd

if errorlevel 1 (
  if not "%IMDISK_SILENT_SETUP%" == "1" msgboxw "Setup failed. Please try to reboot the computer and then try to run the setup package again." 16 "ImDisk Virtual Disk Driver setup"
  endlocal
  goto :eof
)

set IMDISK_START_FAILED=1
if %IMDISK_TOTAL_DEVICES% == 0 (
  set IMDISK_START_FAILED=0
  net start imdsksvc || set IMDISK_START_FAILED=1
  net start awealloc || set IMDISK_START_FAILED=1
  net start imdisk || set IMDISK_START_FAILED=1
)

if not "%IMDISK_SILENT_SETUP%" == "1" (
  if %IMDISK_START_FAILED% == 0 (
    msgboxw "Setup finished successfully. Open ImDisk Virtual Disk Driver applet in Control Panel or use imdisk command line to manage your virtual disks!" 0 "ImDisk Virtual Disk Driver setup"
  ) else (
    msgboxw "Setup finished, but drivers or services could not start. Please try to reboot the computer and then try to run the setup package again." 16 "ImDisk Virtual Disk Driver setup"
  )
)

endlocal

goto :eof

:addline

imdisk -l -u %~1 > nul 2>&1

if errorlevel 1 (
  set /a IMDISK_PENDING_REMOVAL_DEVICES=%IMDISK_PENDING_REMOVAL_DEVICES% + 1 > nul
) else (
  set /a IMDISK_VALID_DEVICES=%IMDISK_VALID_DEVICES% + 1 > nul
)

set /a IMDISK_TOTAL_DEVICES=%IMDISK_TOTAL_DEVICES% + 1 > nul

goto :eof
[/cut]

Posted after 11 minutes:

Ладно передумал, будем делать по другому.

Без Инсталляция и Деинсталляция драйвера, а то я смотировать диск не могу через кнопку. :oops:

Posted after 3 minutes:
А как в батнике проверяется, установлен ли драйвер? Через verifier?
Через команду if exist. Но по мойму легче просто кода надо запустить install.cmd a потом uninstall.cmd.
Но кнопки для mount / unmount по любому нужно делать.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Iori
Для начала в кнопке пишем %V вместо "%P%N". Батник кучу дел делает, а можно было бы с указанной мной утилитой всё упростить в разы.

Всё равно пока не нахожу смысла в uninstall_imdisk.cmd. А вдруг забудешь выполнить? Я за автоматику.
Iori писал(а):Без Инсталляция и Деинсталляция драйвера.
Это как? :o
Iori писал(а):Через команду if exist.
Мдэ. Exe-шник копировать в system32 - это кто придумал? :)
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

Flasher

Спасибо за %V%

Пока кнопки такие:

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

Mount:
TOTALCMD#BAR#DATA
"%commander_path%\Utilities\ImDisk\imdisk.exe"
-a -f "%V" -m R:

Unmount:
TOTALCMD#BAR#DATA
"%commander_path%\Utilities\ImDisk\imdisk.exe"
-D -m r:
Это как?
Тогда получается будет 4 кнопки а не две.

Например: у меня в системе imdisk установлен. За чем мне его инсталлировать или деинсталлировать каждый раз.
Инсталляцию можно решить проверкой на наличие imdisk.sys в System32\Drivers, a что делать с деинсталляцией?

PS:

Вообще можно 3 кнопки.
1. Кнопка проверяет на наличие imdisk.sysм и затем монтирует имедж.
2. Кнопка демонтирует имедж
3. Кнопка демонтирует имедж и уберает imdisk из системы.

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

Сообщение Flasher »

Iori писал(а):Спасибо за %V
-a -f "%V" -m R:
Разве я указал кавычки? Они и так появятся при необходимости, а сдвоенность наоборот в этой ситуации всё поломает.
Iori писал(а):Например: у меня в системе imdisk установлен.
А, без портабельности. Ну, хозяин - барин.
Iori писал(а):Инсталляцию можно решить проверкой на наличие imdisk.sys в System32\Drivers, a что делать с деинсталляцией?
Можно смотреть наличие в списке по driverquery. Или, обратной проверкой if not exist, если всё это не накладно.
Iori писал(а):по этому и надо install.cmd и uninstall.cmd
Я понимаю, но этот вариант, как я уже писал, мне не нравится. Но дело опять же хозяйское.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

Flasher

Сделал так:

Кнопка:

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

TOTALCMD#BAR#DATA
"%commander_path%\Utilities\ImDisk\IMDISK_install.cmd"
%V
[cut]

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

if exist %windir%\system32\imdisk.exe goto :skp
pushd "%~dp0"
net stop imdsksvc 2> nul
net stop awealloc 2> nul
net stop imdisk 2> nul

rundll32 setupapi.dll,InstallHinfSection DefaultInstall 132 .\imdisk.inf

if errorlevel 1 (
  echo ImDisk Setup failed. Please try to reboot the computer and then try to run the setup package again." 16 "ImDisk Virtual Disk Driver setup"
  goto :eof
)


:skp
net start imdsksvc > nul
net start imdisk > nul
echo ImDisk Setup finished successfully.
popd

imdisk.exe -a -f "%1" -m R:
[/cut]

Лучше сделать через comspec /c, потому что в самой кнопке можно будет менять параметры.

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

Сообщение Flasher »

Iori
В батнике битность можно проверять хотя бы по set PROCESSOR_ARCHITEW6432|If %ERRORLEVEL% == 0 или так, например. В vbs можно ещё точнее. Если поставить autorun, то можно прямо смотреть битность по %AUTORUN_OSARCH%.
Поэтому от inf можно и отказаться в пользу предложенного, не трогая путь.

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

Сообщение Iori »

Flasher
Поэтому от inf можно и отказаться в пользу предложенного, не трогая путь.

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\PLUGINS\Tools\REGDRV\regdrv.exe
/i /c PLUGINS\wfx\VirtualDisk\VD_Driver\amd64\vd_filedisk.sys
%COMMANDER_PATH%\PLUGINS\Tools\REGDRV\regdrv.exe
regdrv
%COMMANDER_PATH%\

-1
А если система 32бит, то надо вторую кнопку для 32 битной vd_filedisk.sys? А как знать какая система без проверки?
И как теперь ещё монтировать файл без дополнительного скрипта?
Поэтому от inf можно и отказаться


Не знаю чем inf не понравился. Но даже если от него отказатся, то можно просто тем же install.cmd воспользоваться.

Вот %comspec% было самое то, но у меня не получилось.

[/quote]
Ответить