Страница 1 из 19
Работа с файлами-образами и виртуальными дисками из ТС
Добавлено: Вт фев 09, 2016 02:27
Iori
Imdisk Toolkit нахидится сдесь:
http://reboot.pro/files/file/284-imdisk-toolkit/
Пытаюсь создать две кнопки в командере.
Одна для mount образов и инсталляции драйвера.
Вторая для unmount образов и деинсталляции драйвера.
Инсталляция драйвера происходит через install.cmd
Деинсталляция драйвера происходит через uninstall_imdisk.cmd
Но как сделать что-бы кнопка установила драйвер, а затем монтировала имедж под курсором, я пока не осилил.
Может такая тема уже пробегала?
Добавлено: Вт фев 09, 2016 03:28
Flasher
Iori
Зачем перед каждым монтированием пытаться установить драйвер? Это нужно делать единожды при запуске ТС. См.
обсуждение.
Я, например, монтирую скриптом типа
1,
2 или кнопкой
Сomm: vd_filedisk.exe
Par's: /mount 2 %V /cd /ro X:
Добавлено: Вт фев 09, 2016 04:14
Skif_off
Iori
Я извиняюсь, а зачем ImDisk Toolkit (это просто GUI, которому ещё и необходим .NET Framework), если по сути вы пользуетесь голым ImDisk и этого вполне достаточно?
В кнопке с install.cmd можно дописать параметры "%P%N" (без кавычек) - файл под курсором, в install.cmd дописать команду монтирование переданного файла,
используя "%1".
Добавлено: Вт фев 09, 2016 04:17
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
Добавлено: Вт фев 09, 2016 04:22
Skif_off
Iori писал(а):Но, после закрытия ТС, драйвер же не деинсталлируется из системы.
Указанный вами плагин может запустить любую команду и при закрытии TC.
Добавлено: Вт фев 09, 2016 04:27
Flasher
Iori писал(а):Деинсталлация, что-бы не оставлять следы на чужой системе.
Но, после закрытия ТС, драйвер же не деинсталлируется из системы.
Продолжение обсуждения.
Iori писал(а):Например через этот плагин:
Есть своя тема по ссылке выше.
Iori писал(а):Можно в Сomm строке запустить два приложения?
Можно, конечно. Через %Comspec% /c спереди, а объединять через && для ожидания успешного выполнения первой команды.
Добавлено: Вт фев 09, 2016 04:33
Iori
Skif_off
Указанный вами плагин может запустить любую команду и при закрытии TC.
Это я не знал. Но всё ровно через батник удобнее будет. Так как не всегда нужно что-бы драйвер устанавливался.
Голый ImDisk пойдёт.
в install.cmd дописать команду монтирование переданного файла, используя "%1".
Я в батниках не силён, попробую и отпишусь.
Добавлено: Вт фев 09, 2016 04:35
Flasher
Iori
Может, сперва стоило батник выложить? Полагаю, можно и без него обойтись.
Iori писал(а):Но всё ровно через батник удобнее будет. Так как не всегда нужно что-бы драйвер устанавливался.
А как в батнике проверяется, установлен ли драйвер? Через verifier?
Мне лично это нужно, чтобы работали и утилиты и плагин в любое время.
Добавлено: Вт фев 09, 2016 05:03
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:
Ладно передумал, будем делать по другому.
Без Инсталляция и Деинсталляция драйвера, а то я смотировать диск не могу через кнопку.
Posted after 3 minutes:
А как в батнике проверяется, установлен ли драйвер? Через verifier?
Через команду if exist. Но по мойму легче просто кода надо запустить install.cmd a потом uninstall.cmd.
Но кнопки для mount / unmount по любому нужно делать.
Добавлено: Вт фев 09, 2016 05:06
Flasher
Iori
Для начала в кнопке пишем %V вместо "%P%N". Батник кучу дел делает, а можно было бы с указанной мной утилитой всё упростить в разы.
Всё равно пока не нахожу смысла в uninstall_imdisk.cmd. А вдруг забудешь выполнить? Я за автоматику.
Iori писал(а):Без Инсталляция и Деинсталляция драйвера.
Это как?
Iori писал(а):Через команду if exist.
Мдэ. Exe-шник копировать в system32 - это кто придумал?

Добавлено: Вт фев 09, 2016 05:35
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
Добавлено: Вт фев 09, 2016 05:56
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
Я понимаю, но этот вариант, как я уже писал, мне не нравится. Но дело опять же хозяйское.
Добавлено: Вт фев 09, 2016 06:06
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 правельной битности.
Добавлено: Вт фев 09, 2016 06:28
Flasher
Iori
В батнике битность можно проверять хотя бы по set PROCESSOR_ARCHITEW6432|If %ERRORLEVEL% == 0 или
так, например. В vbs можно ещё точнее. Если поставить autorun, то можно прямо смотреть битность по %AUTORUN_OSARCH%.
Поэтому от inf можно и отказаться в пользу
предложенного, не трогая путь.
VBS что ль накидать.

Добавлено: Вт фев 09, 2016 07:21
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]