[архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Ответить
 • Просмотры: 7
Аватара пользователя
comsun

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение comsun »

Помогите разобраться: есть простенький скрипт с запросом второго диска для распаковки FreeArc:
читать дальше »





Цитата:



#define MyAppName "Test"

#define MyAppVerName "Test"

#define MyAppExeName "Test.exe"



[Setup]

AppName={#MyAppName}

AppVerName={#MyAppName}

DefaultDirName={pf}\{#MyAppName}

DirExistsWarning=no

;DisableReadyPage=true

ShowLanguageDialog=auto

OutputBaseFilename=setup

OutputDir=.

UninstallDisplayIcon={app}\{#MyAppExeName}

DefaultGroupName={#MyAppName}

InternalCompressLevel=none

Compression=none



[UninstallDelete]

Type: filesandordirs; Name: {app}



[Languages]

Name: eng; MessagesFile: compiler:Default.isl

Name: rus; MessagesFile: compiler:Languages\Russian.isl



[Files]

Source: C:\Program Files\FreeArc\bin\Arc.exe; DestDir: {tmp}; Flags: dontcopy



[CustomMessages]

ExtrError=Произошла ошибка во время извлечения данных. Установка будет прервана.


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

 

var 

SecondProgressBar: TNewProgressBar; 

 

procedure InitializeWizard(); 

begin 

WizardForm.FileNameLabel.Hide; 

WizardForm.StatusLabel.Top:=ScaleY(81); 

WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width; 

WizardForm.StatusLabel.Width:=ScaleX(262); 

WizardForm.ProgressGauge.Top:=ScaleY(100); 

WizardForm.ProgressGauge.Left:=ScaleX(155); 

WizardForm.ProgressGauge.Width:=ScaleX(262); 

 

SecondProgressBar := TNewProgressBar.Create(WizardForm); 

with SecondProgressBar do 

begin 

Parent := WizardForm.InstallingPage; 

Left := ScaleX(0); 

Top := ScaleY(100); 

Width := ScaleX(150); 

Height := ScaleY(21); 

Min := 0; 

Max := 13; //задается как (кол-во распаковываемых архивов * 3) + 1 

end; 

end; 

 

procedure PlsInsertNextDisk(num: integer; CheckedFile: string); 

var Capt:string; 

begin 

CheckedFile:=ExpandConstant(CheckedFile); 

if not FileExists(CheckedFile) then begin 

Capt:='Пожалуйста, вставьте диск %n, содержащий файл %f и нажмите ОК для продолжения установки.'; 

StringChange(Capt, '%n', inttostr(num)); 

StringChange(Capt, '%f', ExtractFileName(CheckedFile)); 

MsgBox(Capt, mbInformation, MB_OK); 

PlsInsertNextDisk(num, CheckedFile); 

end; 

end; 

 

procedure ExtractArc(arcArchName,arcDestDir:string); 

var ResCode:integer; 

begin 

WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles); 

Exec(ExpandConstant('{tmp}\arc.exe'), 'x '+AddQuotes(ExpandConstant(arcArchName))+' -y -dp'+AddQuotes(ExpandConstant(arcDestDir)), '', SW_HIDE, ewWaitUntilTerminated, ResCode); 

if (ResCode  0) then begin 

MsgBox(ExpandConstant('{cm:ExtrError}'), mbCriticalError, MB_OK); 

SecondProgressBar.Hide; 

DelTree(ExpandConstant('{app}'), True, True, True); 

Abort; 

end else 

SecondProgressBar.Position:= SecondProgressBar.Position+3 

end; 

 

procedure CurStepChanged(CurStep: TSetupStep); 

begin 

if CurStep = ssInstall then begin 

WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles); 

ExtractTemporaryFile('arc.exe'); 

SecondProgressBar.Position:=SecondProgressBar.Position+1; 

 

ExtractArc('{src}\data-1.arc','{app}\');

ExtractArc('{src}\data-2.arc','{app}\');

 

PlsInsertNextDisk(2, '{src}\data-3.arc'); //если data4.arc не найден в корне диска, просим второй диск

ExtractArc('{src}\data-3.arc','{app}\');

ExtractArc('{src}\data-4.arc','{app}\');

PlsInsertNextDisk(1, '{src}\data-1.arc'); //снова просим первый диск

end; 

end;
		
	
	


 

Если пытаюсь установить в папку по умолчанию (именно этого скрипта) - не распаковывается, ошибка! Если, например, меняю путь на [i]D:\Games\Test[/i] - распаковывается! 

Теперь самое ужасное: использую этот скрипт для игры - ни в какую папку, ни на какой диск распаковка не идёт!!! Пробовал на одних и тех же архивах! Help! [img]images/smilies/sad.gif[/img]

[b]Serega[/b], как-то пробовал ваш скрипт FreeArc - вообще не распаковывалось... что я не так делаю? [img]images/smilies/sad.gif[/img]

З.Ы. Окно во время распаковки не кликабельное, т.е. свернуть, переместить нельзя, - это можно как-то исправить???
Аватара пользователя
EN130

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение EN130 »

Serega,
http://s41.radikal.ru/i092/0910/4a/d0cb82a15b90.jpg
И весь документ такой. Тоесть все страницы пустые, а меню вродебы работает.
Аватара пользователя
Bambaso

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение Bambaso »

Цитата Serega:



Пример кода
[архив] Скрипты Inno Setup. Помощь и советы [часть 2]




у меня в Form Designer нету такой закладки, есть

Редактор кода но он показывает только:



Код:

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

var
  Memo1: TMemo;
  ListBox1: TListBox;
  CheckBox1: TCheckBox;

а вот координаты и другие свойства объектов - нету, где их взять?

Версия 1.1.2c



нашел, оказывается в настройках нужно было поставить... Все спасибо!
Аватара пользователя
EN130

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение EN130 »

Цитата A1EXXX:



Помогите разобраться:
[архив] Скрипты Inno Setup. Помощь и советы [часть 2]




Лишний бэкслеш, т.е. надо так - ExtractArc('{src}\data-1.arc','{app}'); и т.д.




Цитата A1EXXX:



как-то пробовал ваш скрипт FreeArc - вообще не распаковывалось... что я не так делаю?
[архив] Скрипты Inno Setup. Помощь и советы [часть 2]




У меня всё нормально распаковывается...




Цитата A1EXXX:



Окно во время распаковки не кликабельное, т.е. свернуть, переместить нельзя, - это можно как-то исправить???
[архив] Скрипты Inno Setup. Помощь и советы [часть 2]




При использовании ewWaitUntilTerminated окно и будет не кликабельным...

Выход из ситуации - это запускать распаковку без ожидания, плюс добавить процедуру в которой проверять в цикле список процессов и если arc.exe есть, то делать ожидание, скажем 200-300 мс.

Процесс можно проверять через ISTask.dll или через функцию IsProgRunning, из этого скрипта (правда работает не на всех версиях Windows):


Пример




Код:

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

; В Диспетчере задач, вкладка Процессы, присутствует MyProc.exe.
; Как его остановить программно, аналогично тому, как это делает кнопка Завершить процесс в Диспетчере?
; Данный пример показывает, как проверить работает ли программа и если необходимо, то завершить её.
; Не уверен, что будет работать на всех версиях Windows...
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
VersionInfoCopyright=Serega, serg_0675@mail.ru
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Code]
var
  ResultCode: Integer;
function IsProgRunning(ProgName: string): Boolean;
// функция определяет, запущенно ли приложение
var
  Size: Integer;
begin
  Result:= False;
  Exec('cmd', '/c tasklist /fi "IMAGENAME eq ' + ProgName + '" >"' +
    ExpandConstant('{tmp}\RunList"'), '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
  if FileSize(ExpandConstant('{tmp}\RunList'), Size) then
    if Size > 0 then Result:= True;
end;
function CloseProg(ProgName: string; Child: Boolean): Boolean;
// функция завершает работающее приложение со всеми дочерними (Child) процессами
var
  Tree: string;
begin
  Result:= False;
  if Child then Tree:= ' /t' else Tree:= '';
  Exec('cmd', '/c taskkill /f' + Tree + ' /im ' + ProgName, '', SW_HIDE,
    ewWaitUntilTerminated, ResultCode);
  if not IsProgRunning(ProgName) then Result:= True;
end;
function InitializeSetup(): Boolean;
begin
  Result:= False;
  if Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOWMINIMIZED, ewNoWait, ResultCode) then
   if IsProgRunning('notepad.exe') then
    if MsgBox('Обнаружена работающая программа notepad. Закрыть её?',
      mbConfirmation, MB_YESNO) = IDYES then
    if CloseProg('notepad.exe', True) then
      begin
        MsgBox('Программа успешно завершена.', mbInformation, MB_OK)
        Result:= True;
      end
    else MsgBox('К сожалению, программу завершить не удалось.', mbInformation, MB_OK);
end;
Аватара пользователя
Serega

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение Serega »

Убрал, теперь всё как по маслу Изображение

Буду пробовать добавить кликабельность Изображение

Serega, как всегда на высоте, респект Изображение



Нифига не получается Изображение
Аватара пользователя
lmiol

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение lmiol »

здарвствуйте - все поиски зашли в тупик проблему решить не выходит, подскажите может кто знает





Код:

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

Name: "{userdesktop}\Quake Live"; Filename: {pf}\QuakeLiveFirefoxPrism\Firefox\firefox.exe; Parameters:  -app application.ini -override "{userappdata}\WebApps\quake.live@prism.app\override.ini" -webapp quake.live@prism.app; WorkingDir: {pf}\QuakeLiveFirefoxPrism\Profiles\Clear\extensions\refractor@developer.mozilla.org\prism; Tasks: desktopicon; IconFilename: "{userappdata}\id Software\quakelive\home\baseq3\quakelive.dll"; IconIndex: 0; Components: browser

где красным - там стоят кавычки и не комплится инстал, а в ярлыке они стоять должны иначе будет эррор



подскажите как сделать так чтобы кавычки в ярлыке в этом месте прописывались...
Аватара пользователя
Habetdin

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение Habetdin »

lmiol, а так?



Код:

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

Name: "{userdesktop}\Quake Live"; Filename: {pf}\QuakeLiveFirefoxPrism\Firefox\firefox.exe; Parameters:  -app application.ini -override ""{userappdata}\WebApps\quake.live@prism.app\override.ini"" -webapp quake.live@prism.app; WorkingDir: {pf}\QuakeLiveFirefoxPrism\Profiles\Clear\extensions\refractor@developer.mozilla.org\prism; Tasks: desktopicon; IconFilename: "{userappdata}\id Software\quakelive\home\baseq3\quakelive.dll"; IconIndex: 0; Components: browser
Ответить

Вернуться в «Автоматическая установка приложений»