Почему не отрабатывает батник?

Александр85

Новичок
Здравствуйте!
Почему не отрабатывает батник: файл CMD или BAT из секции RUN, для удаления всякой "времянки"?
Код:
DEL /F /S /Q %WINDIR%\Temp\*.*
DEL /F /S /Q %SYSTEMDRIVE%\Temp\*.*
DEL /F /S /Q %SYSTEMDRIVE%\Tmp\*.*
DEL /F /S /Q %WINDIR%\Setup\Scripts
DEL /F /S /Q %Temp%\*.*
DEL /F /S /Q %Tmp%\*.*
DEL /F /S /Q "%USERPROFILE%\Local Settings\Temp\*.*"
DEL /F /S /Q "%USERPROFILE%\Local Settings\Temporary Internet Files\Content.IE5\*.*"
DEL /F /S /Q "%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Default\Cache\"
DEL /F /S /Q %WINDIR%\Prefetch\*.*
DEL /F /S /Q %SYSTEMDRIVE%\*.log
DEL /F /S /Q %SYSTEMDRIVE%\*.bak
DEL /F /S /Q %SYSTEMDRIVE%\*.gid
DEL /F /S /Q %SYSTEMDRIVE%\*.tmp
RD /S /Q %TMP%
RD /S /Q %TEMP%
RD /S /Q %SYSTEMDRIVE%\Temp
RD /S /Q %SYSTEMDRIVE%\Tmp
RD /S /Q %Windir%\Temp
RD /S /Q %ProgramData%\Temp
RD /S /Q %ProgramData%\USOShared\Logs
RD /S /Q %ProgramData%\Microsoft\Search\Data\Temp
RD /S /Q %userprofile%\AppData\Local\CrashDumps
RD /S /Q %WINDIR%\Setup\Scripts
RD /S /Q %WINDIR%\Panther
MD %Windir%\Temp
MD %Temp%
MD %Tmp%
MD %ProgramData%\Microsoft\Search\Data\Temp
powershell -NoLogo -windowStyle hidden -command "& Clear-RecycleBin -force" 2>NUL
sfc /cachesize=0
sfc /purgecache
exit
Сам EXE-шник запускаю с правами Администратора, а в секции RUN, вот так вот указано:
Код:
[Run]
Filename: "{app}\1.bat (или 1.cmd)";  WorkingDir: "{app}"; Flags: shellexec runascurrentuser waituntilterminated skipifdoesntexist
Стоит флаг "runascurrentuser" соответственно секции RUN - ведь передаются те же права, с какими и был запущен сам EXE-шник, а его я запускаю с правами Админа? Вручную ("мышкой") батник запускается и отрабатывает отлично, а через Inno Setup никак почему-то?
Что не так? Другие батники запускаются и отрабатывают, а также если, грубо говоря, пару команд оставить здесь и этот батник тоже отрабатывает!
Что здесь неверно? Или предложите свой вариант для очистки "времянки", пожалуйста!
 
Последнее редактирование:

audiofeel

Старожил
вам не батник нужно запускать а комстроку.
Filename: "{cmd}"; Parameters: ".......";
 

Yaroslav950

Участник
@Александр85, попробуй вести через процедуру procedure CurStepChanged(CurStep: TSetupStep);
Только внимательно прочитай,за что отвечает каждый флаг.
 

Александр85

Новичок
@Александр85, попробуй вести через процедуру procedure CurStepChanged(CurStep: TSetupStep);
Только внимательно прочитай,за что отвечает каждый флаг.
Так мне нужно в самом самом конце, уже после завершения всего и перед закрытием инсталлятора
 

Yaroslav950

Участник
Ну батник желательно в конце запускать,если вы распаковывает файлы через батник,то другое дело.
 

SBalykov

Старожил
Так мне нужно в самом самом конце, уже после завершения всего и перед закрытием инсталлятора
Попробуйте так:
Код:
procedure CurStepChanged(CurStep: TSetupStep);
var i: integer;
begin
  case CurStep of
  ssDone:  Exec(ExpandConstant('{app}\1.bat'), ' /q /norestart', '', SW_HIDE, ewWaitUntilTerminated, i);
  end;
end;
А в секции RUN - убрать...
 
Последнее редактирование:

HandyMan

Новичок
Код:
[Run]
Filename: "{sys}\cmd.exe"; Parameters: " /C ""{app}\run.bat"" "; WorkingDir: "{app}"; Flags: postinstall waituntilterminated skipifdoesntexist
Код:
[Run]
Filename: "{app}\run.bat"; Flags: postinstall skipifdoesntexist
START "Deteting tmp files" /WAIT DEL /F /S /Q %WINDIR%\Temp\*.*
START "Deteting tmp files" /WAIT DEL /F /S /Q %SYSTEMDRIVE%\Temp\*.*
START "Deteting tmp files" /WAIT DEL /F /S /Q %SYSTEMDRIVE%\Tmp\*.*
 
Последнее редактирование:

Александр85

Новичок
Да и в батнике у вас слишком много вызовов команд их для работы надо разделить хотя бы паузой (TIMEOUT /T 3 /NOBREAK).
Иначе он просто не сможет выполнить столько запросов.
Не помогло! "По категориям" сначала разделил, потом вообще по 4-6 штук, потом по 2 вообще команды с разным таймером ничего! Вручную всё работает!
 

Александр85

Новичок
эти flags при файлах .bat и .cmd не надо использовать.

Достаточно так:
Код:
[Run]
Filename: "{app}\1.bat (или 1.cmd)";  WorkingDir: "{app}"; Flags: runascurrentuser skipifdoesntexist
Как это? shellexec - как раз же указывает, на то что файл не является исполняемым файлом типа exe и т.п.!
А waituntilterminated - мне нужен чтобы установщик "подождал"...
В любом случае и так тоже не работает
 

Александр85

Новичок
Код:
[Run]
Filename: "{sys}\cmd.exe"; Parameters: " /C ""{app}\run.bat"" "; WorkingDir: "{app}"; Flags: postinstall skipifdoesntexist
Код:
[Run]
Filename: "{app}\run.bat"; Flags: postinstall skipifdoesntexist
START "Deteting tmp files" /WAIT DEL /F /S /Q %WINDIR%\Temp\*.*
START "Deteting tmp files" /WAIT DEL /F /S /Q %SYSTEMDRIVE%\Temp\*.*
START "Deteting tmp files" /WAIT DEL /F /S /Q %SYSTEMDRIVE%\Tmp\*.*
нет даже даже не запустился
 

Александр85

Новичок
Попробуйте так:
Код:
procedure CurStepChanged(CurStep: TSetupStep);
var i: integer;
begin
  case CurStep of
  ssDone:  Exec(ExpandConstant('{app}\1.bat'), ' /q /norestart', '', SW_HIDE, ewWaitUntilTerminated, i);
  end;
end;
А в секции RUN - убрать...
Тоже не помогло А SW_HIDE, поменял на SW_SHOWNORMAL, чтобы увидеть! Консольное окно мелькнуло на долю секунды и закрылось! Поменял мои команды удаления в батнике - на запуск там... Блокнота, Пэинта, Калькулятора, различных текстовых документов на компе и т.п. )) Много команд сделал! Всё отработало с любым вариантом, хоть из Code, хоть из RUN!
 

vint56

Ветеран
Проверенный
запускаеться но только Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
C:\Windows\Temp\epf8457.tmp Отказано в доступе.

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
PrivilegesRequired=admin

[Files]
Source: "1.bat"; DestDir: "{app}"; Flags: ignoreversion

[Run]
Filename: "{app}\1.bat"; WorkingDir: "{app}"; Flags: shellexec runascurrentuser waituntilterminated skipifdoesntexist
 

Crachlow

Старожил
Тоже не помогло А SW_HIDE, поменял на SW_SHOWNORMAL, чтобы увидеть! Консольное окно мелькнуло на долю секунды и закрылось! Поменял мои команды удаления в батнике - на запуск там... Блокнота, Пэинта, Калькулятора, различных текстовых документов на компе и т.п. )) Много команд сделал! Всё отработало с любым вариантом, хоть из Code, хоть из RUN!
Flags: runhidden
 

Александр85

Новичок
запускаеться но только Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
C:\Windows\Temp\epf8457.tmp Отказано в доступе.

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
PrivilegesRequired=admin

[Files]
Source: "1.bat"; DestDir: "{app}"; Flags: ignoreversion

[Run]
Filename: "{app}\1.bat"; WorkingDir: "{app}"; Flags: shellexec runascurrentuser waituntilterminated skipifdoesntexist
Именно так и было у меня изначально, не отрабатывает! И именно с этими командами в батнике, напиши я туда запуск Блокнота )) Работает!
 

Andreo Fadio

Старожил
Как это? shellexec - как раз же указывает, на то что файл не является исполняемым файлом типа exe и т.п.!
А waituntilterminated - мне нужен чтобы установщик "подождал"...
Да - да - да... Уф не работает...
 
Последнее редактирование:
Сверху