Скрипты Inno Setup. Помощь и советы [часть 5]
-
Batistas
Re: Скрипты Inno Setup. Помощь и советы [часть 5]
Yury_Prizrak, никогда не работал с xml документами, может стоит посмотреть
здесь
XML - Модуль для работы с XML файлами.
-
nik1967
Re: Скрипты Inno Setup. Помощь и советы [часть 5]
Цитата Yury_Prizrak:
Как сначала проверить наличие атрибута 'bbb'
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, может стоит установить расширенную версию от Китайских братьев? ISC 5.5.1. ee1 (u) Система Win 7 x64 SP1
Может быть я что не так установил...
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]
Ivan_009,
кнопки "завершить" и "установить" нет!
это всё кнопка "далее" текст которой зависит от её, кнопки, расположения на той или иной странице
передвигать кнопки, если их расположение, на разных страницах разное нужно во встроенной процедуре переключения страниц
Код:
также запомни для повышении оптимизации, укорачивания кода и тем самым удалении ненужного кода:
если ты кнопку например на странице приветствия расположил слева снизу
и на следующей странице она там же, то при переходе на след. страницу остаются настройки с предыдущей, те не надо указывать те же координаты пока кнопка там же
пример:
Код:
================================== Demo ===================================
настройки переключения как выше(для примера двигаем кнопку далее) :
Код:
те же настройки через таймер (не использовать такой метод без нужды)
под расширенную версию:
Код:
кнопки "завершить" и "установить" нет!
это всё кнопка "далее" текст которой зависит от её, кнопки, расположения на той или иной странице
передвигать кнопки, если их расположение, на разных страницах разное нужно во встроенной процедуре переключения страниц
читать дальше »
Код:
Код: Выделить всё
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]
Batistas, залей на обменник проект целиком со всеми файлами. у меня все великолепно компилится, на 5.4.3 расширенной. Подозреваю, что ошибка после внесения тобой каких-либо изменений в скрипт.
-
nik1967
Re: Скрипты Inno Setup. Помощь и советы [часть 5]
Batistas, и кстати, да, ошибка возможна из-за файлов. Попробуй закомментировать секцию [Files] (все файлы) и у меня ещё закомментирована строка ";SetupIconFile=Icon.ico" - всё прекрасно компилируется и на Compil32.exe и на Compil32Ex.exe.
-
El Sanchez
Re: Скрипты Inno Setup. Помощь и советы [часть 5]
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]
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", сейчас буду тестить.
Собсно результат тестирования: запустился два раза, один раз с рантайм ерор и зависла, второй раз тоже с рантайм ерор, до конца дошла, но ни ник, ни звук не прописались.
Все-таки придется с лайв сиди возиться
читать дальше »
"[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]
Как сделать свою форму запроса выхода из установки примерно как тут и чтобы работала с IsDone 

-
Johny777
Re: Скрипты Inno Setup. Помощь и советы [часть 5]
Цитата Mafioza:
как ассоциировать файлы
Смотри примеры в справке.
Делается примерно так
Пример 1
Код:
Пример 2
Код:
Пример 3
Код:
Первый пример можно так же ассоциировать не только через HKLM но и HKCU. Это уж по личному усмотрению, кому как удобно.
Вкратце:
HKLM - идёт как общая расчитана на всех пользователей, т.е при таком условии даже новый созданный юзер на компе автоматически ассоциируется с программой.
HKCU - В основном расчитана на одного пользователя, т.е при каком пользователе программа ассоциировалась то на нём и останется, на других зверей не повлеяет.
как ассоциировать файлы
Скрипты 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 - В основном расчитана на одного пользователя, т.е при каком пользователе программа ассоциировалась то на нём и останется, на других зверей не повлеяет.