Показать полную графическую версию : CMD не хочет убивать сам себя.
Значит так!
При установке я выбираю в BCDW нужный мне способ установки
[MenuItems]
\i386\setupldr.bin
и соответственно выбирается свой winnt.sif в котором есть строка
[GUIRunOnce]
command1 = "%SystemDrive%\Install\COMPANY1.cmd"
Которая как видно запускает мой файл COMPANY1.cmd. В нем как раз и содержатся лишь то что надо установить лишь для конкретного winnt.sif.
(а в RunOnceEx.cmd ставятся стандарные для всех установак приложения)
Вот его содержание:
cmdow @ /HID
@echo off
FOR %%d IN (c d e f g h i j k l m n o p q r s t u v w x y z) DO IF EXIST %%d:\WIN51 SET CDROM=%%d:
START /WAIT %CDROM%\install\sav\COMPANY1.exe
START /WAIT %CDROM%\install\sav\sav.exe
START /WAIT %systemdrive%\Install\SAV\SAV.msi /QN RUNLIVEUPDATE=0 REBOOT=ReallySuppress
START /WAIT %systemdrive%\Cleanup.cmd
EXIT
В нем мы сначала ищем CD (другой способ не приемлем, т.к. файл запускается не с компакт диска), запускаем два ЕХЕ-шника (первый распаковывает необходимый для нас GRC.DAT для нашей COMPANY1, а второй распаковывает архив с SAV), устанавливаем SAV-антивирус. Далее запускается чистельщик Cleanup.cmd с таким кодом :
cmdow @ /HID
RD /S /Q %systemdrive%\Install\
erase cleanup.cmd /s /q
del cleanup.cmd /s /q
EXIT
Так вот он папку убивает, а себя не хочит. Erase и Del использовал вместе ради эксперимента, но :o нет реакции.
Ваши советы.
ЗЫ: Зачам такой изврат? А чтоб избавиться от необходимости выбора нужного GRC.DAT при установке. А точнее избавиться от мною придуманного способа. Идея лежит тут -
http://forum.oszone.net/showthread.php?p=36690#post36690 :o
1.cmdow @ /HID
@echo off
FOR %%d IN (c d e f g h i j k l m n o p q r s t u v w x y z) DO IF EXIST %%d:\WIN51 SET CDROM=%%d:
START /WAIT %CDROM%\install\sav\COMPANY1.exe
START /WAIT %CDROM%\install\sav\sav.exe
START /WAIT %systemdrive%\Install\SAV\SAV.msi /QN RUNLIVEUPDATE=0 REBOOT=ReallySuppress
RD /S /Q %systemdrive%\Install\
EXIT
Или
2.cmdow @ /HID
@echo off
FOR %%d IN (c d e f g h i j k l m n o p q r s t u v w x y z) DO IF EXIST %%d:\WIN51 SET CDROM=%%d:
START /WAIT %CDROM%\install\sav\COMPANY1.exe
START /WAIT %CDROM%\install\sav\sav.exe
START /WAIT %systemdrive%\Install\SAV\SAV.msi /QN RUNLIVEUPDATE=0 REBOOT=ReallySuppress
START /WAIT %systemdrive%\Cleanup.cmd
del %systemdrive%\cleanup.cmd /s /q
EXIT и cmdow @ /HID
RD /S /Q %systemdrive%\Install\
EXIT
Имхо первый вариант удобнее
Пробую.
Но есть еще и вариант когда нужно из winnt.sif просто запустить cleanup.cmd с
cmdow @ /HID
RD /S /Q %systemdrive%\Install\
EXIT
например когда SAV устанавливать нет необходиимости, а папочку install убить необходимо
Мой вариант:
winnt.sif
[GUIRunOnce]
command1 = "%SystemDrive%\Cleanup.cmd"
Тогда опять тупик.
Petya V4sechkin
30-06-2005, 09:32
Grenky
и соответственно выбирается свой winnt.sif в котором есть строка
[GUIRunOnce]
command1 = "%SystemDrive%\Install\COMPANY1.cmd"
Попробуй так:
[GUIRunOnce]
command1 = "%SystemDrive%\Install\COMPANY1.cmd"
command2 = "%SystemRoot%\system32\Cmd.exe /C RD /S /Q %SystemDrive%\Install\"
Petya V4sechkin
[GUIRunOnce]
command2 = "%SystemRoot%\system32\Cmd.exe /C RD /S /Q %SystemDrive%\Install\" - это интересно
Vadikan
DEL %0
объясни что за параметр такой
Grenky
Сорри, я ветку целиком не читал, а только название. Просто сделай эту строку последней в файле. Тестовый файл
@echo off
echo testing the file
pause
DEL %0
Vadikan хоть ты и не объяснил но пологаю что %О есть сам файл. Т.е. сокращенный вариант
del cleanup.cmd /s /q
или я не прав
если прав то такое не прокатило.
Grenky
Ну да, это сам файл. Только не О а 0 (ноль). Ты мой код сохрани как test.bat и запусти. Все работает.
Vadikan работает и как я сказал, но только при тестах на установленной системе. А при непосредственной установке не работает.
видемо лучший вариант + нет дополнительного батника это.
При варианте когда надо установить SAV
winnt.sif:
[GUIRunOnce]
command1 = "%SystemDrive%\Install\COMPANY1.cmd"
COMPANY1.cmd:
cmdow @ /HID
@echo off
FOR %%d IN (c d e f g h i j k l m n o p q r s t u v w x y z) DO IF EXIST %%d:\WIN51 SET CDROM=%%d:
START /WAIT %CDROM%\install\sav\COMPANY1.exe
START /WAIT %CDROM%\install\sav\sav.exe
START /WAIT %systemdrive%\Install\SAV\SAV.msi /QN RUNLIVEUPDATE=0 REBOOT=ReallySuppress
RD /S /Q %systemdrive%\Install\
EXIT
А если не надо то просто в winnt.sif:
[GUIRunOnce]
command1 = "%SystemRoot%\system32\Cmd.exe /C RD /S /Q %SystemDrive%\Install\"
и все.
ПыСы: Заметили скока Vadikan-а я не спрашивал про параметр %0 - молчит как партизан :)
Заметили скока Vadikan-а я не спрашивал про параметр %0 - молчит как партизанKxe, открываем командую строку и в ней печатаем FOR /? и идем до последнего блока документации. Или смотрим в этой ветке (http://forum.oszone.net/showthread.php?t=46182). Ну и напоследок, взято из темы на MSFN (http://www.msfn.org/board/index.php?showtopic=49617), она сейчас на самом верху
@Echo OFF
SetLocal enableextensions
CLS
Echo.
Echo I am file (not yet expanded): %0
Echo My Expanded File Name: %~n0
Echo My Expanded Extension: %~x0
Echo My Expanded Name and Extension: %~nx0
Echo My Expanded Drive: %~d0
Echo The Expanded Root of My Drive: %~d0\
Echo Some Other Expanded Path on My Drive: %~d0\SomeOtherPath
Echo My Expanded Path: %~p0
Echo My Expanded Drive and Path: %~dp0
Echo.
Pause
EndLocal
GoTo :EOF
Petya V4sechkin
30-06-2005, 11:05
Grenky
В твоем варианте директория Install не удалится, потому что файл COMPANY1.cmd в ней.
В секции GUIRunOnce можно указать несколько команд.
Поэтому я и предложил:
[GUIRunOnce]
command1 = "%SystemDrive%\Install\COMPANY1.cmd"
command2 = "%SystemRoot%\system32\Cmd.exe /C RD /S /Q %SystemDrive%\Install\"
Совершенно лишний пост.. На самом деле все прекрасно удаляется.. Нечаянно ввел в заблуждение Vadikan'а :)
to Petya V4sechkin
Протестил... Удалился
В твоем варианте я не уверен что command2 будет ждать отработку command1.
Поправь если ошибаюсь.
to Vadikan
спасибо за разъяснение
Grenky
Нда, причина как раз и была в директория Install не удалится, потому что файл COMPANY1.cmd в ней.Ты же можешь cleanup.cmd в любую другую директорию поместить, хоть в %windir%\temp и оттуда уже запускать. Он и директорию Install удалит и сам себя потом. Я же сказал, что я ветку целиком не читал
LOL
см. мой первый пост. Это первоначальный вариант:
START /WAIT %systemdrive%\Cleanup.cmd
он и так в корне.
протестил те варианты что описал здесь (http://forum.oszone.net/showthread.php?p=337159#post337159) все работает.
Grenky
Ладно, я выпил достаточно пива, чтобы об'яснить популярно :) Вместо START /WAIT %systemdrive%\Cleanup.cmd надо использовать CALL %systemdrive%\Cleanup.cmdТогда первый файл вызовет второй, а сам продолжит работу, т.е. закроется (вызываем-то мы последней командой). Тогда второму файлу ничего не помешает удалить директорию, содержащую первый файл, а потом и сам себя.
Конечно, протестировать GuiRunOnce я не могу, но только что проверил RunOnceEx. Итак, в %systemdrive%\test помещаем test1.cmd
cmdow @ /HID
@echo off
echo this is a line from the test1,cmd file >> %systemdrive%\file.txt
call %systemdrive%\test2.cmd
exit
В корень %systemdrive% кладем test2.cmd
cmdow @ /HID
@echo off
RD /S /Q %systemdrive%\test
DEL %0
exit
Создаем RunOnce.cmd
cmdow @ /HID
@echo off
SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
REG ADD %KEY% /V TITLE /D "Bla-bla-bla" /f
REG ADD %KEY%\001 /VE /D "Bla-bla-bla" /f
REG ADD %KEY%\001 /V 1 /D "%systemdrive%\test1.cmd" /f
exit
запускаем его, выходим из системы и снова заходим. Папки %systemdrive%\test вместе с test1.cmd как не бывало. test2.cmd тоже исчез, зато есть %systemdrive%\file.txt, в котором одна строка, подтверждающая, что test1.cmd отработал.
Ваше здоровье :beer:
хех нехотит слухать и все :)
я говорю всё работает Без кучи дополнительный cmd (см. выше)
Petya V4sechkin
30-06-2005, 14:15
Grenky
Теперь ясно, где собака порылась.
Изначально ошибка была в файле cleanup.cmd, строка "del cleanup.cmd" - естественно, ведь текущая директория совсем не %SystemDrive%. Поэтому и файл не удалялся.
А "del %0" замечательно работает, как и предлагал Vadikan.
И "rd /S /Q %systemdrive%\Install\" тоже прекрасно работает, даже из батника, который в этой же директории находится. Как и предлагал D@nil.
А я че-то затупил, извиняюсь :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.