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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Автоматическая установка Windows 2000/XP/2003 (http://forum.oszone.net/forumdisplay.php?f=32)
-   -   CMD не хочет убивать сам себя. (http://forum.oszone.net/showthread.php?t=51126)

Grenky 30-06-2005 08:23 337115

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.p...6690#post36690 :o

D@nil 30-06-2005 08:57 337123

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

Имхо первый вариант удобнее

Grenky 30-06-2005 09:14 337129

Пробую.
Но есть еще и вариант когда нужно из winnt.sif просто запустить cleanup.cmd с
Код:

cmdow @ /HID 
RD /S /Q %systemdrive%\Install\ 
EXIT

например когда SAV устанавливать нет необходиимости, а папочку install убить необходимо
Мой вариант:
winnt.sif
Код:

[GUIRunOnce] 
command1 = "%SystemDrive%\Cleanup.cmd"

Тогда опять тупик.

Vadikan 30-06-2005 09:31 337133

Grenky
Код:

DEL %0

Petya V4sechkin 30-06-2005 09:32 337135

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\"


Grenky 30-06-2005 09:47 337137

Petya V4sechkin
Цитата:

[GUIRunOnce]
command2 = "%SystemRoot%\system32\Cmd.exe /C RD /S /Q %SystemDrive%\Install\"
- это интересно
Vadikan
Цитата:

DEL %0
объясни что за параметр такой

Vadikan 30-06-2005 09:57 337141

Grenky
Сорри, я ветку целиком не читал, а только название. Просто сделай эту строку последней в файле. Тестовый файл
Код:

@echo off
echo testing the file
pause
DEL %0


Grenky 30-06-2005 10:11 337144

Vadikan хоть ты и не объяснил но пологаю что есть сам файл. Т.е. сокращенный вариант
Код:

del cleanup.cmd /s /q
или я не прав
если прав то такое не прокатило.

Vadikan 30-06-2005 10:37 337154

Grenky
Ну да, это сам файл. Только не О а 0 (ноль). Ты мой код сохрани как test.bat и запусти. Все работает.

Grenky 30-06-2005 10:52 337159

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 30-06-2005 11:03 337168

Цитата:

Заметили скока Vadikan-а я не спрашивал про параметр %0 - молчит как партизан
Kxe, открываем командую строку и в ней печатаем FOR /? и идем до последнего блока документации. Или смотрим в этой ветке. Ну и напоследок, взято из темы на MSFN, она сейчас на самом верху
Код:

@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 337169

Grenky
В твоем варианте директория Install не удалится, потому что файл COMPANY1.cmd в ней.

В секции GUIRunOnce можно указать несколько команд.
Поэтому я и предложил:
Код:

[GUIRunOnce]
        command1 = "%SystemDrive%\Install\COMPANY1.cmd"
        command2 = "%SystemRoot%\system32\Cmd.exe /C RD /S /Q %SystemDrive%\Install\"

Совершенно лишний пост.. На самом деле все прекрасно удаляется.. Нечаянно ввел в заблуждение Vadikan'а :)

Grenky 30-06-2005 11:15 337171

to Petya V4sechkin
Протестил... Удалился
В твоем варианте я не уверен что command2 будет ждать отработку command1.
Поправь если ошибаюсь.
to Vadikan
спасибо за разъяснение

Vadikan 30-06-2005 11:18 337172

Grenky
Нда, причина как раз и была в
Цитата:

директория Install не удалится, потому что файл COMPANY1.cmd в ней.
Ты же можешь cleanup.cmd в любую другую директорию поместить, хоть в %windir%\temp и оттуда уже запускать. Он и директорию Install удалит и сам себя потом. Я же сказал, что
Цитата:

я ветку целиком не читал
LOL

Grenky 30-06-2005 11:25 337175

см. мой первый пост. Это первоначальный вариант:
Цитата:

START /WAIT %systemdrive%\Cleanup.cmd
он и так в корне.

протестил те варианты что описал здесь все работает.

Vadikan 30-06-2005 11:46 337182

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:

Grenky 30-06-2005 12:33 337195

хех нехотит слухать и все :)
я говорю всё работает Без кучи дополнительный cmd (см. выше)

Petya V4sechkin 30-06-2005 14:15 337207

Grenky
Теперь ясно, где собака порылась.
Изначально ошибка была в файле cleanup.cmd, строка "del cleanup.cmd" - естественно, ведь текущая директория совсем не %SystemDrive%. Поэтому и файл не удалялся.
А "del %0" замечательно работает, как и предлагал Vadikan.
И "rd /S /Q %systemdrive%\Install\" тоже прекрасно работает, даже из батника, который в этой же директории находится. Как и предлагал D@nil.
А я че-то затупил, извиняюсь :)


Время: 16:43.

Время: 16:43.
© OSzone.net 2001-2025