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

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

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

Сообщение Batistas »

Yury_Prizrak, никогда не работал с xml документами, может стоит посмотреть
здесь


XML - Модуль для работы с XML файлами.
Аватара пользователя
nik1967

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

Сообщение nik1967 »

Цитата Yury_Prizrak:



Как сначала проверить наличие атрибута 'bbb'
Скрипты Inno Setup. Помощь и советы [часть 5]




Yury_Prizrak,



Код:

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

//способ №1
XMLAttributes := XMLNode.attributes;
XMLAttrib := XMLAttributes.getNamedItem('bbb');
if not VarIsEmpty(XMLAttrib) then MsgBox(XMLAttrib.value, mbInformation, MB_OK);
//способ №2
XMLAttrib := XMLNode.getAttribute('bbb');
if not VarIsNull(XMLAttrib) then MsgBox(XMLAttrib, mbInformation, MB_OK);
Аватара пользователя
Batistas

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

Сообщение Batistas »

Цитата:



Batistas, может стоит установить расширенную версию от Китайских братьев? ISC 5.5.1. ee1 (u) Система Win 7 x64 SP1



http://s014.radikal.ru/i329/1208/08/29dbd796a9c2.png
Изображение Может быть я что не так установил...
Аватара пользователя
Batistas

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

Сообщение Batistas »

Ivan_009,

кнопки "завершить" и "установить" нет!

это всё кнопка "далее" текст которой зависит от её, кнопки, расположения на той или иной странице



передвигать кнопки, если их расположение, на разных страницах разное нужно во встроенной процедуре переключения страниц


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




Код:

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

procedure CurPageChanged(CurPageID: Integer); 
begin
  case CurPageID of
    wpFinished:
    begin
       /// здесь пишешь координаты кнопки (если ширина и высотра не менялись, то только Top и Left)
    end;
  end;
end;





также запомни для повышении оптимизации, укорачивания кода и тем самым удалении ненужного кода:

если ты кнопку например на странице приветствия расположил слева снизу

и на следующей странице она там же, то при переходе на след. страницу остаются настройки с предыдущей, те не надо указывать те же координаты пока кнопка там же

пример:


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




Код:

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

procedure CurPageChanged(CurPageID: Integer); 
begin
  case CurPageID of
    wpWelcome:
    begin
       WizardForm.NextButton.SetBounds(ScaleX(543), ScaleY(556), ScaleX(87), ScaleY(27));
    end;
    wpSelectDir:
    begin
       WizardForm.NextButton.SetBounds(ScaleX(543), ScaleY(556), ScaleX(87), ScaleY(27));
    end;
  end;
end;







================================== Demo ===================================

настройки переключения как выше(для примера двигаем кнопку далее) :


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




Код:

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

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
UninstallFilesDir={app}\uninstall
[code]
procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpWelcome: WizardForm.NextButton.Left := ScaleX(5);
    wpSelectDir: WizardForm.NextButton.Left := ScaleX(30);
    wpReady: WizardForm.NextButton.Left := ScaleX(70);
  end;
end;







те же настройки через таймер (не использовать такой метод без нужды)

под расширенную версию:


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




Код:

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

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
UninstallFilesDir={app}\uninstall
[code]
var
  Page_Timer: Longword;
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
procedure Pages;
begin
  case WizardForm.CurPageID of
    wpWelcome: WizardForm.NextButton.Left := ScaleX(5);
    wpSelectDir: WizardForm.NextButton.Left := ScaleX(30);
    wpReady: WizardForm.NextButton.Left := ScaleX(70);
  end;
end;
procedure InitializeWizard;
begin
  Page_Timer := SetTimer(WizardForm.Handle, 3, 1, CallbackAddr('Pages')); /// где 3 уникальное число и в другом таймере должно быть другое, чтоб они не пересекались
end;
procedure DeinitializeSetup;
begin
  KillTimer(WizardForm.Handle, Page_Timer);
end;
Аватара пользователя
Gnom_aka_Lexander

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

Сообщение Gnom_aka_Lexander »

Batistas, залей на обменник проект целиком со всеми файлами. у меня все великолепно компилится, на 5.4.3 расширенной. Подозреваю, что ошибка после внесения тобой каких-либо изменений в скрипт.
Аватара пользователя
nik1967

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

Сообщение nik1967 »

Batistas, и кстати, да, ошибка возможна из-за файлов. Попробуй закомментировать секцию [Files] (все файлы) и у меня ещё закомментирована строка ";SetupIconFile=Icon.ico" - всё прекрасно компилируется и на Compil32.exe и на Compil32Ex.exe.
Аватара пользователя
El Sanchez

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

Сообщение El Sanchez »

Batistas, определимся с понятиями. Файлы ISCmplr.dll, Setup.e32, SetupLdr.e32, ISCC.exe, ISPP.dll - это файлы компилятора и препроцессора, Compil32(Ex).exe - редактор (среда разработки, IDE). Скрипт компилируется на обоих видах компилятора (ANSI и Unicode), но отработал только в ANSI, на Unicode ругань на несоответствие типов, крах при создании аттрибутов, ваша ошибка тоже всплыла. Оказалось, что юникоду не понравились метод createElement при создании нод и метод setAttribute при создании аттрибутов. Процедуру CreateDCPlusPlus в своем предыдущем посте исправил.
Аватара пользователя
Batistas

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

Сообщение Batistas »

nik1967, Gnom_aka_Lexander помог мне потестить - у него все работает. У меня же выдает ошибку:


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


"[17:57:04,339] *** Установка started

[17:57:07,052] Setup version: Inno Setup version 5.4.3.ee1 (u)

[17:57:07,053] Original Setup EXE: C:\Users\Batista\Desktop\Сборка DC++\ApexDC-s16_4.exe\ApexDC-s16_4.exe\Output\Synergetic & MaxiRu DC-P2P Pack 1.0.0.exe

[17:57:07,054] Setup command line: /SL5="$160888,2072628,140800,C:\Users\Batista\Desktop\Сборка DC++\ApexDC-s16_4.exe\ApexDC-s16_4.exe\Output\Synergetic & MaxiRu DC-P2P Pack 1.0.0.exe" /DEBUGWND=$230120

[17:57:07,055] Windows version: 6.1.7601 SP1 (NT platform: Yes)

[17:57:07,056] 64-bit Windows: Yes

[17:57:07,057] Processor architecture: x64

[17:57:07,058] User privileges: Administrative

[17:57:07,065] 64-bit install mode: No

[17:57:07,067] Created temporary directory: C:\Users\Batista\AppData\Local\Temp\is-ELRD4.tmp

[17:57:07,365] InitializeWizard raised an exception (fatal).

[17:57:07,367] Exception message:

[17:57:07,368] Message box (OK):

Runtime Error (at 0:0):



Variant is null, cannot invoke.

[17:57:09,104] User chose OK.

[17:57:09,106] Deinitializing Setup.

[17:57:09,251] *** Установка exit code: 1



El Sanchez, спасибо, я с версиями уже разобрался. Компилировал при помощи Inno Ultra. И вообще, у меня такое ощущение складывается, что дело в системе. Ведь экзэшник скомпилированный появляется в папке аутпат, но не запускается. Сегодня попробую через LiveCD все это дело проделать



Разобрался. Запустилось только с переменной "ArchitecturesInstallIn64BitMode=x64", сейчас буду тестить. Изображение

Собсно результат тестирования: запустился два раза, один раз с рантайм ерор и зависла, второй раз тоже с рантайм ерор, до конца дошла, но ни ник, ни звук не прописались.

Все-таки придется с лайв сиди возиться Изображение
Аватара пользователя
Ivan_009

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

Сообщение Ivan_009 »

Как сделать свою форму запроса выхода из установки примерно как тут и чтобы работала с IsDone Изображение
Аватара пользователя
Johny777

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

Сообщение Johny777 »

Цитата Mafioza:



как ассоциировать файлы
Скрипты Inno Setup. Помощь и советы [часть 5]




Смотри примеры в справке.

Делается примерно так


Ассоциация файлов




Пример 1



Код:

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

[Registry]
Root: HKLM; Subkey: "Software\Classes\.w3m"; ValueType: string; ValueName: ""; ValueData: "WorldEdit.Scenario"; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\Classes\WorldEdit.Scenario\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\WorldEdit.exe,2"; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\Classes\WorldEdit.Scenario\shell\open\command"; ValueType: string; ValueName: ""; ValueData: "{app}\World Editor.exe ""%1"""; Flags: uninsdeletevalue

Пример 2



Код:

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

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[Registry]
Root: HKLM; Subkey: SOFTWARE\Classes\.v64; Check: CheckOption(0)
Root: HKLM; Subkey: SOFTWARE\Classes\.z64; Check: CheckOption(1)
Root: HKLM; Subkey: SOFTWARE\Classes\MP64; ValueType: string; ValueData: My Program; Flags: uninsdeletekey
Root: HKLM; Subkey: SOFTWARE\Classes\MP64\DefaultIcon; ValueType: string; ValueData: {app}\MyProgram.exe,0
Root: HKLM; Subkey: SOFTWARE\Classes\MP64\shell\open\command; ValueType: string; ValueData: {app}\MyProgram.exe %1
[ Code]
var
  Page: TInputOptionWizardPage;
procedure InitializeWizard();
begin
  Page := CreateInputOptionPage(wpSelectTasks,
  'Select File Extension Association', 'Which the file extension you would like to associate?',
  'Select the file extension you would like to associate with My Program,'#13#10'then click Next.',
  False, False);
  {0} Page.Add('.v64');
  {1} Page.Add('.z64');
Page.Values[0] := True;
end;
function CheckOption(OptionNum: integer): Boolean;
begin
  Result:= Page.Values[OptionNum];
end;
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpReady then
    begin
    WizardForm.ReadyMemo.Lines.Add('');
      if Page.Values[1] or Page.Values[2] then
    WizardForm.ReadyMemo.Lines.Add('File extension association:');
      if Page.Values[1] then
    WizardForm.ReadyMemo.Lines.Add('      .v64');
      if Page.Values[2] then
    WizardForm.ReadyMemo.Lines.Add('      .z64');
  end;
end;





Пример 3





Код:

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

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
[Types]
Name: full; Description: Полная установка
Name: cu stom_clean; Description: Пользовательская установка; Flags: iscustom
[Components]
Name: main; Description: Основные компоненты; Types: full custom_clean; Flags: checkablealone
Name: main\ass; Description: Установить ассоциации:; Types: full custom_clean; Flags: checkablealone
Name: main\ass\ani; Description: .ani; Types: full custom_clean
[Registry]
Root: HKCU; Subkey: Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ani; ValueType: string; ValueName: ; ValueData: ; Components: main\ass\ani
Root: HKCU; Subkey: Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ani; ValueType: string; ValueName: ProgID; ValueData: IrfanView.ani; Flags: uninsdeletevalue uninsdeletekeyifempty; Components: main\ass\ani
[ Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
  String: String;
begin
if (CurStep = ssInstall) and (IsComponentSelected('main\ass\ani') = False) then
  if (ExpandConstant('{ reg:HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ani,ProgID}') = 'IrfanView.ani') or
    (ExpandConstant('{reg:HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ani,ProgID}') = 'IrfanView.ANI') then
    begin
    RegDeleteValue(HKEY_CURRENT_ USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ani', 'ProgID')
    if (RegQueryStringValue(HKEY_CURRENT_ USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ani', '', String)) and (String = '') then
        RegDeleteValue(HKEY_CURRENT_ USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ani', '')
    RegDeleteKeyIfEmpty(HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ani')
    end
end;








Первый пример можно так же ассоциировать не только через HKLM но и HKCU. Это уж по личному усмотрению, кому как удобно.



Вкратце:

HKLM - идёт как общая расчитана на всех пользователей, т.е при таком условии даже новый созданный юзер на компе автоматически ассоциируется с программой.

HKCU - В основном расчитана на одного пользователя, т.е при каком пользователе программа ассоциировалась то на нём и останется, на других зверей не повлеяет.
Ответить

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