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

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

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

Сообщение lmiol »

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
Аватара пользователя
Wiper

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

Сообщение Wiper »

Цитата A1EXXX:



создавать файл каждый раз вручную надоедает
[архив] Скрипты Inno Setup. Помощь и советы [часть 2]




Ну, можно положить в установочный пакет готовый "desktop.ini",

насколько мне извесно, винде не важно точное расположение иконки в папке

(Serega, думаю меня поправит, или опровергнет), посему его можно заполнить сразу, и добавить в пакет установки.



Код:

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

[.ShellClassInfo]
IconResource=MyProg.exe
IconIndex=0

и использовать такой код:


читать дальше »






Код:

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

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=userdocs:My Program.
[Dirs]
Name: "{app}"; Attribs: "readonly";
[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion;
Source: "desktop.ini"; Attribs: "system hidden"; DestDir: "{app}"; Flags: ignoreversion;





Или вариант без таскания за собой готового desktop.ini, создать его во время установки:


читать дальше »




Код:

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

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=userdocs:My Program.
[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion;
[code]
procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
begin
  if CurStep = ssPostInstall then
  begin
    SetIniString('.ShellClassInfo', 'IconResource',
                      ExpandConstant('{app}\MyProg.exe') + #13#10 'IconIndex=0', ExpandConstant('{app}\desktop.ini'));
    Exec('attrib', ' +r ' + '"' + ExpandConstant('{app}') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
    Exec('attrib', ' +h +s ' + '"' + ExpandConstant('{app}\desktop.ini') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
  end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
    DeleteFile(ExpandConstant('{app}\desktop.ini'));
end;
Аватара пользователя
lmiol

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

Сообщение lmiol »

grinda, оно?
читать дальше »




[Setup]

WizardSmallImageFile=C:\UpperImage.bmp


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


var

PageNameLabel1: TLabel;



procedure InitializeWizard();

begin

PageNameLabel1 := TLabel.Create(WizardForm);

with PageNameLabel1 do

begin

Left := ScaleX(13);

Top := ScaleY(9);

Width := ScaleX(300);

Height := ScaleY(14);

AutoSize := False;

WordWrap := True;

Font.Name := 'Tahoma'

Font.Style := [fsBold];

ShowAccelChar := False;

Transparent := True;

Parent := WizardForm.MainPanel;

end;



with WizardForm do

begin

PageNameLabel.Hide;

PageDescriptionLabel.Hide;

with MainPanel do

begin

with WizardSmallBitmapImage do

begin

Left := ScaleX(0);

Top := ScaleY(0);

Width := Mainpanel.Width;

Height := MainPanel.Height;

end;

end;

end;

end;



procedure CurPageChanged(CurPageID: Integer);

begin

PageNameLabel1.Caption := WizardForm.PageNameLabel.Caption;

end;
Аватара пользователя
Serega

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

Сообщение Serega »

Цитата A1EXXX:



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




Ну, хоть это радует.


Цитата:



меня больше интересует избавление от ewWaitUntilTerminated в скрипте FreeArc...



Понятия не имею, но, думаю придёт Serega, и обязательно поможет.
Аватара пользователя
lmiol

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

Сообщение lmiol »

Цитата A1EXXX:



не знаю, как применить это в моём случае...
[архив] Скрипты Inno Setup. Помощь и советы [часть 2]




Вы какую версию Inno используете? Дело в том, что для обычной версии (пробовал на 5.3.5 ansi) не получается, в момент установки вылетает ошибка, а для Restools - без проблем...


Цитата A1EXXX:



но создавать файл каждый раз вручную надоедает
[архив] Скрипты Inno Setup. Помощь и советы [часть 2]




Все скрипты приходится писать руками... Изображение




Цитата serg aka lain:



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




Только если она расположена в корне самой папки, а не её подпапках. Изображение


Цитата serg aka lain:



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




Всё правильно, я в своё время использовал все эти методы...
Аватара пользователя
Serega

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

Сообщение Serega »

Serega, у меня последняя от Restools. Для моего случая нужно использовать весь пример скрипта или этого куска достаточно?
Цитата:


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


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;
		
	
	
 если достаточно, то как задать задержку 200-300 мс и связать с [b]arc.exe[/b] моего скрипта... [img]images/smilies/sad.gif[/img]
Аватара пользователя
A1EXXX

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

Сообщение A1EXXX »

Цитата A1EXXX:



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




Написал на основе .dll'ки, т.к. при частом запуске cmd для проверки процесса, не всегда удаётся нажать на кнопку Отмена в момент распаковки.


Пример




Код:

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

#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]
Name: {app}; Type: filesandordirs
[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Files]
; измените на своё место расположение dll'ки, у меня она расположена
; C:\Program Files\Inno Setup 5\Libraries\*
Source: C:\Program Files\Inno Setup 5\Libraries\ISTask.dll; Flags: dontcopy
Source: C:\Program Files\FreeArc\bin\Arc.exe; Flags: dontcopy
[CustomMessages]
ExtrError=Произошла ошибка во время извлечения данных. Установка будет прервана.
[Code]
function RunTaskA(FileName: string; bFullpath: Boolean): Boolean;
  external 'RunTask@files:ISTask.dll stdcall delayload setuponly';
function KillTaskA(ExeFileName: string): Integer;
  external 'KillTask@files:ISTask.dll stdcall delayload setuponly';
// запускает указанный файл, с параметрами указанными в CmdShow
function WinExec(lpCmdLine: PChar; uCmdShow: Cardinal): Cardinal;
  external 'WinExec@kernel32.dll stdcall';
var
  SecondProgressBar: TNewProgressBar;
  ExtractAllArc: Boolean;
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 WaitProgUntilTerminated;
var
  i: Integer;
begin
  // проверим запустился ли файл, если нет, то
  if not RunTaskA('Arc.exe', False) then
   for i:= 0 to 500 do
    // подождём пока файл запустится
    if not RunTaskA('Arc.exe', False) then
      begin
        Sleep(10); // ждём максимум 5 сек.
        Application.ProcessMessages;
      end
    else Break;
  // если запущен, то ждём завершения
  while RunTaskA('Arc.exe', False) do
    begin
      Sleep(10);
      Application.ProcessMessages;
    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
  ResultCode: Integer;
begin
  WizardForm.StatusLabel.Caption:= SetupMessage(msgStatusExtractFiles);
  // запускаем файл
  ResultCode:= WinExec(AddQuotes(ExpandConstant('{tmp}\arc.exe')) + ' x ' +
    AddQuotes(ExpandConstant(arcArchName)) + ' -y -dp' +
      AddQuotes(ExpandConstant(arcDestDir)), SW_HIDE);
  if (ResultCode < 33) then
    begin
      MsgBox(ExpandConstant('{cm:ExtrError}'), mbCriticalError, MB_OK);
      SecondProgressBar.Hide;
      if RunTaskA('Arc.exe', False) then KillTaskA('Arc.exe');
      DelTree(ExpandConstant('{app}'), True, True, True);
      Abort;
    end
  else
    begin
      SecondProgressBar.Position:= SecondProgressBar.Position + 3;
      WaitProgUntilTerminated;
    end;
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}\Project.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'); //снова просим первый диск
      ExtractAllArc:= True; // сообщим, что все архивы распаковали
    end;
end;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  if CurPageID = wpInstalling then
    if ExtractAllArc then
      Cancel:= True
    else
    if ExitSetupMsgBox then
      begin
        if RunTaskA('Arc.exe', False) then KillTaskA('Arc.exe');
        DelTree(ExpandConstant('{app}'), True, True, True);
        KillTaskA(ChangeFileExt(ExtractFileName(ParamStr(0)), '.tmp'));
      end
    else
  Cancel:= False;
end;
Аватара пользователя
Serega

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

Сообщение Serega »

Serega, Изображение, огромное спасибо! Изображение Мегареспект!!!
Ответить

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