Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: htuos
Дата сообщения: 04.09.2008 00:07
Genri

Цитата:
А по поводу QWORD - все решается достаточно просто:
type
QWord = Double;



Код: type
DWORD = cardinal;
BOOL = LongBool;
FLOAT = Single;
QWORD = int64;
Автор: Genri
Дата сообщения: 04.09.2008 01:10
htuos

Цитата:
тут скорее Comp подошел бы
-- я не програмер, поэтому спорить не буду Хотя по моему мнению, еще лучше подошел бы сам Int64. Но так как в инно его нет, приходится выбирать из тех 8-байтовых что есть - Double или Currency. Впрочем, для решения задачи, думаю что этого достаточно.
Автор: Victor_Dobrov
Дата сообщения: 04.09.2008 06:51
Прошу помощи и попробую описать проблемку, с которой я столкнулся:
Делаю в Corona Skin всплывающие подсказки для списков компонентов и задач, структура скрипта та же, что и в примере из ReadMe.rtf:

[Setup]
... настройка скина препроцессором (и установка некоторых параметров Setup)
#include SkinPath + "Corona_kernel.iss" - после этого ISPP уже не меняет код.
скрипт пользователя ...

[Tasks] - хинт к строке подключает макрос, который пишется после этой строки.
Name: Prio; Description: Диспетчер задач - добавить управление службами
#expr Info('russian', 'управление службами и приоритетами процессов из диспетчера задач')

Задача: перед #include найти в основном скрипте фрагмент "#expr Info" [например так: Find(0, "#expr Info", Find_Contains)], присвоить #define EnableHints результат поиска (true или false) и подгрузить скрипт (в котором есть команды условной компиляции #ifdef EnableHints). Проблема в том, что Find ищет только до текущей строки, а секция [Tasks] расположена ниже.
Автор: bull3t
Дата сообщения: 04.09.2008 13:57
Помогите пожалуйста!
Я, наверное, уже вас задолбал, но чото мне это инсталляха тяжело дается.
Такая проблема. Вот код:
[more]
[Setup]
AppId={{1EC1215A-25C0-490C-8A5A-3581127A6213}
AppName=Selena
AppVerName=Selena 2.5.4
AppPublisherURL=http://www.cronos.dn.ua/
AppSupportURL=http://www.cronos.dn.ua/
AppUpdatesURL=http://www.cronos.dn.ua/
DefaultDirName={pf}\Selena
DefaultGroupName=Selena
OutputBaseFilename=Selena setup vol.2
Compression=lzma
SolidCompression=yes
CreateUninstallRegKey=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Components]
Name: "operator"; Description: "ÀÐÌ Îïåðàòîðà"; Types: full compact
Name: "arm_admin"; Description: "ÀÐÌ Àäìèíèñòðàòîðà"; Types: full compact
Name: "arm_admin\admin"; Description: "ÀÐÌ Àäìèíèñòðàòîðà"; Types: full compact
Name: "arm_admin\instrument"; Description: "Èíñòðóìåíòû àäìèíèñòðèðîâàíèÿ"; Types: full compact
Name: "arm_admin\sn"; Description: "Ñèãíàë/Øóì"; Types: full compact
Name: "server"; Description: "Ñåðâåðíîå ÏÎ"; Types: full
Name: "server\serv"; Description: "Ñåðâåð"; Types: full
Name: "server\intel"; Description: "Êàíàëüíîå îáîðóäîâàíèå ÈíòÒåë"; Types: full
Name: "server\cronos"; Description: "Êàíàëüíîå îáîðóäîâàíèå Êðîíîñ"; Types: full
Name: "docs"; Description: "Äîêóìåíòàöèÿ"; Types: full compact
Name: "postgres"; Description: "Óñòàíîâêà Postgre SQL"; Types: full



[Files]
Source: "{src}\drop user.bat"; DestDir: "{app}"; Flags: ignoreversion external
Source: "{src}\drop user.bat.lnk"; DestDir: "{app}"; Flags: ignoreversion external

Source: "{src}\_install_service.bat.lnk"; DestDir: "{app}"; Flags: ignoreversion external deleteafterinstall
Source: "{src}\_install_service.bat"; DestDir: "{app}"; Flags: ignoreversion external deleteafterinstall

Source: "{src}\Program Files\Cronos2001CE.log4net"; DestDir: "{app}"; Flags: ignoreversion external; Components: server\cronos or server;
Source: "{src}\Program Files\Cronos2001ClientConnector.log4net"; DestDir: "{app}"; Flags: ignoreversion external; Components: operator
Source: "{src}\Program Files\IntTelCE.log4net"; DestDir: "{app}"; Flags: ignoreversion external; Components: server\intel or server;
Source: "{src}\Program Files\IntTelClientConnector.log4net "; DestDir: "{app}"; Flags: ignoreversion external; Components: operator

Source: "{src}\run_dotnetfx.bat"; DestDir: "{app}"; Flags: ignoreversion external; Components: operator or arm_admin or arm_admin\admin or arm_admin\instrument or arm_admin\sn or server
Source: "{src}\run_dotnetfx.bat.lnk"; DestDir: "{app}"; Flags: ignoreversion external; Components: operator or arm_admin or arm_admin\admin or arm_admin\instrument or arm_admin\sn or server


[Registry]
Root: HKLM; Subkey: "Software\Cronos"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\Cronos\Version"; ValueType: dword; ValueName: "MajorVersion"; ValueData: "$00000002"
Root: HKLM; Subkey: "Software\Cronos\Version"; ValueType: dword; ValueName: "MinorVersion"; ValueData: "$00000005"
Root: HKLM; Subkey: "Software\Cronos\Version"; ValueType: dword; ValueName: "SelenaVersion"; ValueData: "$00000000"
Root: HKLM; Subkey: "Software\Cronos\Version"; ValueType: dword; ValueName: "CronosVersion"; ValueData: "$00000004"

[Run]
Filename: "{tmp}\run_dotnetfx.bat.lnk"; Flags: shellexec waituntilterminated; Parameters: /NORESTART /VERYSILENT; Description: "Óñòàíîâêà .Net"; Components: operator or arm_admin or arm_admin\admin or arm_admin\instrument or arm_admin\sn or server
Filename: "{app}\drop user.bat.lnk"; Flags: shellexec waituntilterminated; Parameters: /NORESTART /VERYSILENT; Components: postgres
Filename: "{src}\postgresql\start_posgres.bat.lnk"; Flags: shellexec waituntilterminated; Parameters: /NORESTART /VERYSILENT; Description: "Óñòàíîâêà PostgreSQL"; Components: postgres
Filename: "{src}\posgres_config.exe"; Parameters: /NORESTART /VERYSILENT; Flags: shellexec waituntilterminated; Components: postgres
Filename: "{app}\_install_service.bat.lnk"; Flags: shellexec waituntilterminated; Parameters: /NORESTART /VERYSILENT; Components: operator or arm_admin or arm_admin\admin or arm_admin\instrument or arm_admin\sn or server


[UninstallRun]
Filename: "{app}\_install_service.bat.lnk"; Flags: shellexec waituntilterminated; Parameters: /NORESTART /VERYSILENT; Components: operator or arm_admin or arm_admin\admin or arm_admin\instrument or arm_admin\sn or server
Filename: "{app}\drop user.bat.lnk"; Flags: shellexec waituntilterminated; Parameters: /NORESTART /VERYSILENT; Components: postgres

[Code]

var
Page: TInputQueryWizardPage;
UserName, UserPass, WayTo, UserPass2: String;
CurPageID: Integer;
IsPostreSQLInstallationCanceled: Boolean;
Button: TButton;

procedure ButtonOnClick(Sender: TObject); //Ïðèñâàèâàíèå òåêñòîâîé ñòðîêå îêíà Ïîñòãðå çíà÷åíèÿ ñòðîêè ñòàíäàðòíîãî îêíà Âûáîð ïàïêè
var
Dir: String;
begin
if BrowseForFolder(SetupMessage(msgBrowseDialogLabel), Dir, False) then
Page.Values[3]:=Dir
end;

//Óáèðàåì îêíî Ïðèâåòñòâèÿ
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
end;


//------------------------------------
procedure InitializeWizard(); //èíèöèàëèçàöèÿ îêíà ñ ââîäîì äàííûõ äëÿ Ïîñòðãðåñà
begin

Page := CreateInputQueryPage(wpSelectComponents,
'Ââîä äàííûõ äëÿ PostgreSQL', '',
'Ââåäèòå äàííûå è íàæìèòå Next.');
Page.Add('Ëîãèí ïîäêëþ÷åíèÿ ê ÁÄ:', False);
Page.Add('Ïàðîëü ïîäêëþ÷åíèÿ ê ÁÄ:', True);
Page.Add('Ïîäòâåðæäåíèå ïàðîëÿ ïîäêëþ÷åíèÿ ê ÁÄ:', True);
Page.Add('Ïóòü óñòàíîâêè Postgre SQL', False);
IsPostreSQLInstallationCanceled := false;
Page.Values[3]:=WizardForm.DirEdit.Text;

//îïèñàíèå êíîïêè "Îáçîð" â îêíå Ïîòñòãðå
Button:=TButton.Create(WizardForm)
Button.SetBounds(342, 170, 75, 23)
Button.Caption:=SetupMessage(msgButtonBrowse)
Button.OnClick:=@ButtonOnClick
Button.Parent:=Page.Surface

end;

//------------------------------------

function NextButtonClick(CurPageID: Integer): Boolean; //Ñ÷èòûâàíèå è çàïèñü â ôàéë êëþ÷à Ïîñòãðåãñà
begin

if CurPageID = wpSelectDir then begin
Page.Values[3]:=WizardForm.DirEdit.Text end;

if CurPageId = 7 then
IsPostreSQLInstallationCanceled := False;

if CurPageID = {Page.ID}100 then
begin
if (Page.Values[0] <> '') and
(Page.Values[1] <> '') and
(Page.Values[2] <> '') and
(Page.Values[3] <> '') then
begin
UserName:= Page.Values[0];
UserPass:= Page.Values[1];
UserPass2:= Page.Values[2];
WayTo:= Page.Values[3];

if UserPass = UserPass2 then begin
DeleteFile(ExpandConstant('{src}\postgresql\start_posgres.bat'));
SaveStringToFile(ExpandConstant('{src}\postgresql\start_posgres.bat'), 'postgresql-8.1-int.msi /qr INTERNALLAUNCH=1 ADDLOCAL=server,psql,postgis,pljava,pgadmin,jdbc,npgsql,psqlodbc,pgoledb,includefiles,libfiles,msvclibs,pgxs,binfiles DOSERVICE=1 DOINITDB=1 SERVICEDOMAIN="%COMPUTERNAME%" SERVICEACCOUNT="postgres" SERVICEPASSWORD="postgres" CREATESERVICEUSER=1 SERVICENAME="PostgreSQL Database Server 8.1" SUPERUSER="' + Page.Values[0] + '" ' + 'SUPERPASSWORD="' + Page.Values[1] + '" ' + 'LOCALE="Ukrainian, Ukraine" ENCODING="WIN1251" LISTENPORT="5432" PERMITREMOTE=1 PL_PGSQL=1 BASEDIR="' + Page.Values[3] + '"', True);
SaveStringToFile(ExpandConstant('{src}\postgresql\postgre_config.bat'), ExpandConstant('xcopy "{src}\postgresql\config" ' + Page.Values[3] + '\postres\data\config" /EHRY'), True);
Result:= True;
end
else
MsgBox('&#207;&#224;&#240;&#238;&#235;&#252; &#232;&#235;&#232; &#239;&#238;&#228;&#242;&#226;&#229;&#240;&#230;&#228;&#229;&#237;&#232;&#229; &#239;&#224;&#240;&#238;&#235;&#255; &#226;&#226;&#229;&#228;&#229;&#237;&#251; &#237;&#229;&#239;&#240;&#224;&#226;&#232;&#235;&#252;&#237;&#238;!', mbInformation, MB_OK);

end;
end
else Result:= True;
//---------------------------------------------------------------
if CurPageId = 7 then begin //&#207;&#240;&#238;&#226;&#229;&#240;&#234;&#224; &#237;&#224; &#237;&#224;&#235;&#232;&#247;&#232;&#229; &#196;&#238;&#242;&#205;&#229;&#242;&#224;
if IsComponentSelected('operator') or IsComponentSelected('arm_admin') or IsComponentSelected('arm_admin\admin') or IsComponentSelected('arm_admin\instrument') or IsComponentSelected('arm_admin\sn') or IsComponentSelected('server') and RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322') then begin
if MsgBox('&#211; &#226;&#224;&#241; &#243;&#230;&#229; &#243;&#241;&#242;&#224;&#237;&#238;&#226;&#235;&#229;&#237; .NET Framework. &#213;&#238;&#242;&#232;&#242;&#229; &#235;&#232; &#226;&#251; &#243;&#241;&#242;&#224;&#237;&#238;&#226;&#232;&#242;&#252; &#229;&#227;&#238; &#231;&#224;&#237;&#238;&#226;&#238;?', mbInformation, MB_YESNO) = idYes then begin
DeleteFile(ExpandConstant('{tmp}\run_dotnetfx.bat'));
SaveStringToFile(ExpandConstant('{tmp}\run_dotnetfx.bat'), ExpandConstant('{src}\1033dotnetfx.exe /q:a'), True);
end
else begin
DeleteFile(ExpandConstant('{tmp}\run_dotnetfx.bat'));
SaveStringToFile(ExpandConstant('{tmp}\run_dotnetfx.bat'), 'echo Installation is running...', True);
end;
end;



//---------
end;


end;
//---------------------------------------------------------------

function ShouldSkipPage(PageID: Integer): Boolean; //&#212;-&#232;&#255; &#239;&#240;&#238;&#239;&#243;&#241;&#234;&#224; &#241;&#242;&#240;&#224;&#237;&#232;&#246;&#251;
begin

Result := false;

if PageID = 100 then //&#207;&#240;&#238;&#226;&#229;&#240;&#234;&#224; &#237;&#224; &#237;&#224;&#235;&#232;&#247;&#232;&#229; &#207;&#238;&#241;&#242;&#227;&#240;&#229;&#241;&#224;
begin
if Not IsComponentSelected('postgres') then
Result:= True
else
begin
if RegKeyExists(HKLM, 'SOFTWARE\PostgreSQL\') then
begin
if Not IsPostreSQLInstallationCanceled then
begin
if MsgBox('&#211; &#226;&#224;&#241; &#243;&#230;&#229; &#243;&#241;&#242;&#224;&#237;&#238;&#226;&#235;&#229;&#237; PostgreSQL. &#213;&#238;&#242;&#232;&#242;&#229; &#235;&#232; &#226;&#251; &#243;&#241;&#242;&#224;&#237;&#238;&#226;&#232;&#242;&#252; &#229;&#227;&#238; &#231;&#224;&#237;&#238;&#226;&#238;?', mbInformation, MB_YESNO) = idNo then
begin
DeleteFile(ExpandConstant('{src}\postgresql\start_posgres.bat'));
SaveStringToFile(ExpandConstant('{src}\postgresql\start_posgres.bat'), 'echo Installation is running...', True);
Result:= True;
end;
IsPostreSQLInstallationCanceled := True;
end
else Result := True;
end;
end;
end;

end;




[/more]
вот эти строки и подобные им в коде:
SaveStringToFile(ExpandConstant('{src}\postgresql\postgre_config.bat'), ExpandConstant('xcopy "{src}\postgresql\config" ' + Page.Values[3] + '\postres\data\config" /EHRY'), True);

и

SaveStringToFile(ExpandConstant('{tmp}\run_dotnetfx.bat'), ExpandConstant('{src}\1033dotnetfx.exe /q:a'), True);

должны по идее записывать опр. данные в файлы в папке инсталлятора и папке Temp соответственно. Но почему-то он этого не делает. В чем может быть причина?
Автор: ComradG
Дата сообщения: 04.09.2008 13:57
Потенциал Inno Setup поистине воодушевляет, правда чтобы понять оное со мной должен был случиться инфаркт. Благодаря последнему я сейчас в юутной берлинской больнице со своим преданным другом - нотбуком. Но не в этом суть. Я намедни озадачился: неужели в Inno Setup существует только один способ проверки того, установлено приложение или нет и в положительном случае должно было предложение удалить его перед установкой? Возможно ли оное осуществить без всяких перепрошивок исходников программы, без использования UninsHS.exe и т.д.? Теоретически - можно. Вот пример скрипта, который я написал вчера:
[more]

[Setup]
AppName=My Prog
AppVerName=My Prog
DefaultDirName={pf}\My Prog

[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}";

[_Code]
var
r1, r2: TRadioButton;

procedure CurPageChanged(CurPageID: integer);
begin
if CurPageID = wpSelectDir then
begin
if RegValueExists(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\My Prog_is1', 'InstallLocation') then
begin
WizardForm.PageNameLabel.Caption:='Already Installed';
WizardForm.PageDescriptionLabel.Caption:='Choose the maintenance option to perfom.';
WizardForm.DiskSpaceLabel.Hide;
WizardForm.SelectDirLabel.Hide;
WizardForm.DirEdit.Hide;
WizardForm.DirBrowseButton.Hide;
WizardForm.SelectDirBrowseLabel.Left:=ScaleX(0);
WizardForm.SelectDirBrowseLabel.Top:=ScaleY(1);
WizardForm.SelectDirBrowseLabel.Width:=ScaleX(417);
WizardForm.SelectDirBrowseLabel.Height:=ScaleY(31);
WizardForm.SelectDirBrowseLabel.AutoSize:=false;
WizardForm.SelectDirBrowseLabel.WordWrap:=true;
WizardForm.SelectDirBrowseLabel.Caption:='A program is already installed. Select the operation you want to perfom and click Next to continue.';
r1:=TRadioButton.Create(WizardForm);
r2:=TRadioButton.Create(WizardForm);
with r1 do
begin
Left:=ScaleX(21);
Top:=ScaleY(73);
Width:=ScaleX(145);
Checked:=true;
Caption:='Add/Reinstall components';
Parent:=WizardForm.SelectDirPage;
end;
with r2 do
begin
Left:=ScaleX(21);
Top:=ScaleY(103);
Width:=ScaleX(145);
Caption:='Uninstall';
Parent:=WizardForm.SelectDirPage;
end;
end;
end;
end;

[/more]

Если приложение не установлено, то инсталляция протекает как обычно; но стоит запустить инсталлятор сразу после инсталляции, как страница с выбором папки назначения меняется на кастомформ с двумя радиобатонами, один из которых гласит "Добавить/Переустановить компоненты", второй - "Удалить". В скрипте пока отсутсвует обработчик событий на радиобатоны. Я, собственно, не за готовым решением, скорее - за советом: обработчики написаны, но они не информативны. Если есть предложения, то лучше сразу постите, но не в личку. Думаю, всем будет интересна альтернативная реализация вот этому всеми заезженному скрипту:
[more]

[Setup]
AppName=Inno Setup 5
AppVerName=Inno Setup 5
DefaultDirName={pf}\Inno Setup 5

[Code]
function InitializeSetup(): Boolean;
var
ResultCode: integer;
ResultStr: string;
begin
Result:=true;
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Inno Setup 5_is1', 'UninstallString', ResultStr)
then
begin
if ResultStr<>''
then
begin
ResultStr:=RemoveQuotes(ResultStr);
if MsgBox('Setup has detected that this program is already installed.' #13#13 'Would you like to uninstall it before continuing?', mbConfirmation, MB_YESNO) = idYes
then
if not Exec(ResultStr, '/silent', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
then
MsgBox('Uninstall Error. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Probably, files that need to uninstall was removed or renamed.', mbError, MB_OK);
end;
end;
end;
end;

[/more]

Кстати, относительно того, как сделать из wpInfoBefore что-то наподобие wpLicense, кто просил? Вот, собственно, скрипт:
[more]

[Setup]
AppName=Info
AppVerName=Info
DefaultDirName={pf}\Info
InfoBeforeFile=compiler:license.txt

[Code]
var
CheckBox: TCheckBox;

procedure CheckBoxOnClick(Sender: TObject);
begin
if CheckBox.Checked then
WizardForm.NEXTBUTTON.Enabled:= true
else
WizardForm.NEXTBUTTON.Enabled:= false
end;

procedure CurPageChanged(CurPageID: integer);
begin
if CurPageID = wpInfoBefore then
begin
if not(CheckBox.Checked) then
WizardForm.NEXTBUTTON.Enabled:= false;
end;
end;

procedure InitializeWizard();
begin
CheckBox:= TCheckBox.Create(WizardForm);
CheckBox.Top:= ScaleY(217);
CheckBox.Left:= ScaleX(0);
CheckBox.Width:= ScaleX(140); {может быть и шире, в зависимости от заголовка}
CheckBox.Caption:= 'Yes, I agree with terms.';
CheckBox.OnClick:= @CheckBoxOnClick;
CheckBox.Parent:= WizardForm.InfoBeforePage;

WizardForm.InfoBeforeClickLabel.Height:= ScaleY(31);
WizardForm.InfoBeforeClickLabel.Width:= ScaleX(417);
WizardForm.InfoBeforeClickLabel.Caption:= 'Please read following information. You must accept the terms before continuing with the installation.';
WizardForm.InfoBeforeMemo.Top:= ScaleY(37);
WizardForm.InfoBeforeMemo.Height:= ScaleY(173);
end;

[/more]
И напоследок: относительно имитации NSIS работа продвигается крайне медленно. Если кому интересны мои наработки и эксперименты, то в личку, потому как "сырые" скрипты я выкладивать в постах не намерен. Заранее извиняюсь перед теми, чьи проблемы пока не решил или остались без внимания, также приношу извинения перед всеми, кого так или иначе обидел. Всем привет из осеннего (тут +18) Берлина!
Автор: Genri
Дата сообщения: 04.09.2008 15:33
Victor_Dobrov

Цитата:
Find ищет только до текущей строки
-- в препроцессоре все функции видят только то, что выше точки вызова. Может подойти к задаче с другого бока? Например, пусть пользователь, который хочет использовать хинты, помещает рядом со скриптом ини-файл с именем InfoHints.ini, в котором секция [Tasks] или [Components] содержит ключи по имени тасков, а значения ключей - нужный хинт. А в препроцессоре осуществлять поиск этого файла, и если он найден, выполнять все необходимые действия. С инишником и работать проще.
Автор: GRom V
Дата сообщения: 04.09.2008 15:45
подскажите как мне в секцию [registry] внести это значение. Проблема в том что оно длинное и поэтому не сохраняется, но нужное.

Root: HKLM; SubKey: software\radmin\v3.0\Server\Parameters\; ValueType: binary; ValueName: cgo; ValueData: 61 00 77 00 61 00 79 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 F2 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 61 00 68 00 6F 00 6D 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 00 00 80 00 F2 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 61 00 68 00 6F 00 6D 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 80 00 F2 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 61 00 68 00 6F 00 6D 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 00 00 80 00 F2 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 61 00 68 00 6F 00 6D 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 00 00 80 00 F2 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 61 00 68 00 6F 00 6D 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 80 00 F2 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 61 00 68 00 6F 00 6D 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 F2 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 61 00 68 00 6F 00 6D 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 09 00 00 00 40 80 80 00 F2 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 61 00 68 00 6F 00 6D 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0A 00 00 00 00 00 80 00 F2 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 61 00 68 00 6F 00 6D 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0B 00 00 00 00 00 80 00 F2 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 61 00 68 00 6F 00 6D 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 00 00 FF 00 00 00 F2 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 61 00 68 00 6F 00 6D 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 FF FF FF 00 F2 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 61 00 68 00 6F 00 6D 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 FF FF FF 00 F2 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 61 00 68 00 6F 00 6D 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 FF FF FF 00 F2 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 61 00 68 00 6F 00 6D 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 00 00 80 00 F2 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 61 00 68 00 6F 00 6D 00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Автор: ComradG
Дата сообщения: 04.09.2008 16:08

Цитата:
подскажите как мне в секцию [registry] внести это значение

Экспортируй ключик и делай так
Filename: {sys}\regedit.exe; Parameters: -s {app}\file.reg; WorkingDir: {sys};
Автор: maxdddca123
Дата сообщения: 05.09.2008 00:16
Помогите решить проблему. Добавляю (AddCheckBox) новый чекбокс в TNewCheckListBox. Если в AddCheckBox(Name, KeyID, 0, False, True, False, False, nil ); в значениях name или keyid присутствуют русские буквы или спецсимволы (@), выдаётся ошибка "Значение" is not a valid component name. Подскажите как решить данную проблему ?
ЗЫ Добавление происходит на странице WizardForm.SelectTasksPage. Если создавать новую пустую страницу CreateCustomPage то вроде работает нормально.
Автор: CTACKo
Дата сообщения: 05.09.2008 01:47
По поводу ключика - у меня тоже было с подобной длины ключем, но я все равно делал его в одну строку (с помощью notepad-а), его переставало быть полностью видно в самой InnoSetup, но в скрипт-то он полностью попадал. Для уверенности делал просмотр тоталом или фаром в скрипте - все на месте и при инсталляции все прописывается в реестр нормально. Но можно и отдельным файлом, конечно, но в теле скрипта мне кажеться лучше в случае если строку реестра не нужно будет менять.

Добавлено:
Вопрос по глюку в InnoSetup!

Короче делаю инсталы для игрушек - один раз на конечном файле есть стандартная иконка InnoSetup, и при наведении на файло курсором тултип всплывает с дескрипшеном, а другой раз нет вообще ничего - ни иконки ни дискрипшена!
При этом во всех случаях строка SetupIconFile вообще отсутствует (потому как оно потом всем позициям в меню Пуска раздает эту иконку, что тупо, особенно касаемо пункта деинсталции), что означает юзание стандартной иконки.

Версия 5.2.3, оригинальная английская.

Че за глюк такой?


Добавлено:
2maxdddca123

решается данная проблема очень просто - нельзя там использовать ни кириллицу ни спецсимволы.
Автор: Sampron
Дата сообщения: 05.09.2008 03:01
maxdddca123
хм... у меня [more=работает]
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

[Tasks]
Name: desktopicon; Description: CreateDesktopIcon

[_Code]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectTasks then
WizardForm.TasksList.AddCheckBox('Привет!', '~@#$%^&*', 0, True, True, False, True, nil)
end;
[/more]

CTACKo

Цитата:
Вопрос по глюку в InnoSetup!

Знакомая проблема, это не глюк InnoSetup, это скорей глюк винды, у меня раньше такое было в инсталлах размер которых был больше 400мб, попробуй перезапустить эксплорер.
Автор: Victor_Dobrov
Дата сообщения: 05.09.2008 04:55
Genri, я решил проблему с изменением скрипта препроцессором, если интересно, то [more=вот пример]
[Code]
Procedure InitializeWizard;
Begin
    {Insert1}
End;

[Setup]
AppName=Example
AppVerName=Example 1.5
CreateAppDir=false

#sub ModifyCode
#if Find(0, "Code changed", FIND_CONTAINS) < 0
#insert Find(0, "{Insert1}", FIND_CONTAINS) + 1
    #emit "MsgBox('Code changed', mbError, MB_OK)"
#endif
#endsub

[Tasks]
Name: IconPack; Description: Системные ресурсы - заменить оформление на улучшенное Vista
#expr ModifyCode
[/more]
Автор: maxdddca123
Дата сообщения: 05.09.2008 06:30
Sampron
Какие же вы все умные Спасибо
Автор: ComradG
Дата сообщения: 05.09.2008 08:51
Умные-то умные, но у них какая-то специфическая тусня между собой. На просьбы тех, кого они считаю ниже своего достоинства, они не обращают ровным счетом никакого внимания. Я, например, подаю идею:
[Setup]
AppName=My Prog
AppVerName=My Prog
DefaultDirName={pf}\My Prog

[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}";

[_Code]
var
r1, r2: TRadioButton;

procedure CurPageChanged(CurPageID: integer);
begin
if CurPageID = wpSelectDir then
begin
if RegValueExists(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\My Prog_is1', 'InstallLocation') then
begin
WizardForm.PageNameLabel.Caption:='Already Installed';
WizardForm.PageDescriptionLabel.Caption:='Choose the maintenance option to perfom.';
WizardForm.DiskSpaceLabel.Hide;
WizardForm.SelectDirLabel.Hide;
WizardForm.DirEdit.Hide;
WizardForm.DirBrowseButton.Hide;
WizardForm.SelectDirBrowseLabel.Left:=ScaleX(0);
WizardForm.SelectDirBrowseLabel.Top:=ScaleY(1);
WizardForm.SelectDirBrowseLabel.Width:=ScaleX(417);
WizardForm.SelectDirBrowseLabel.Height:=ScaleY(31);
WizardForm.SelectDirBrowseLabel.AutoSize:=false;
WizardForm.SelectDirBrowseLabel.WordWrap:=true;
WizardForm.SelectDirBrowseLabel.Caption:='A program is already installed. Select the operation you want to perfom and click Next to continue.';
r1:=TRadioButton.Create(WizardForm);
r2:=TRadioButton.Create(WizardForm);
with r1 do
begin
Left:=ScaleX(21);
Top:=ScaleY(73);
Width:=ScaleX(145);
Checked:=true;
Caption:='Add/Reinstall components';
Parent:=WizardForm.SelectDirPage;
end;
with r2 do
begin
Left:=ScaleX(21);
Top:=ScaleY(103);
Width:=ScaleX(145);
Caption:='Uninstall';
Parent:=WizardForm.SelectDirPage;
end;
end;
end;
end;

сделать альтернативный анинсталл(если прога уже установлена), но предложений так и не услышал. Это только часть скрипта - мне интересны конструктивные предложения относительно обработчиков для радиобатонов - у меня они выглядят довольно коряво.

Добавлено:
Поэтому выкладываю только первую часть скрипта.
Автор: Sampron
Дата сообщения: 05.09.2008 12:28
ComradG
Добавь к радиокнопке r2 обработчик: OnClick:=@r2OnClick;
и удаляй:

procedure r2OnClick(Sender: TObject);
var
Res: Integer;
UninsPath: string;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Prog_is1','UninstallString', UninsPath)
UninsPath:=RemoveQuotes(UninsPath)
Exec(UninsPath,'','',SW_SHOW,ewWaitUntilTerminated,Res)
end;

Автор: GRom V
Дата сообщения: 05.09.2008 12:59
ComradG
и
CTACKo

Спасибо... CTACKo надоже на счет блокнота - точно....
Автор: Artem_Butenko
Дата сообщения: 05.09.2008 14:53
Genri -- у меня возникла интересная идея по поводу скрипта с выбором директории исходников, который Вы предложили мне первично. Очень интересно было бы реализовать такую возможность: если исходники находятся рядом с исполнительным файлом инсталлятора, то страница выбора директории исходников пропускается и появляется страница выбора директории установки, далее происходит стандартная процедура установки. Если это возможно, помогите советом или шаблоном скрипта, всегда буду искренне рад Вашей помощи!
Автор: STALKER_HIGHLANDER
Дата сообщения: 05.09.2008 17:03
Genri

Спасибо за решение проблемы с ридми.
Автор: Genri
Дата сообщения: 05.09.2008 18:55
Artem_Butenko

Цитата:
если исходники находятся рядом с исполнительным файлом инсталлятора
-- а как инсталлятор определит, что находящиеся рядом файлы являются исходниками? Если предположить, что исходники представляют собой папку определенного имени (напр. BOBO) и в исходниках всегда есть файл mysoft.exe, то тогда сложностей нет. Достаточно в исходный скрипт добавить процедуру пропуска страницы. [more=Пример][no]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName={pf}\My Program

[Files]
Source: {code:SrcDir}\*; DestDir: {app}; Flags: external

[Code]
var
Page: TInputDirWizardPage;
DataDir: String;

function SrcDir(Param: String): String;
begin
Result := DataDir;
end;

procedure InitializeWizard();
begin
Page := CreateInputDirPage(wpUserInfo,
'Select Data Location', 'Where should data files be stored?',
'Data files will be stored in the following folder.'#13#10#13#10 +
'To continue, click Next. If you would like to select a different folder, click Browse.',
False, '');
Page.Add('');
Page.Values[0] := ExpandConstant('{src}');
end;

function CheckSource(path: string): boolean;
begin
Result := FileExists(path);
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result:= True;
if CurPageID = Page.ID then
if Not CheckSource(Page.Values[0] + '\mysoft.exe') then
Result:= False
else
DataDir := Page.Values[0];
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = Page.ID) and
CheckSource(ExpandConstant('{src}\BOBO\mysoft.exe')) then
begin
DataDir:= ExpandConstant('{src}\BOBO');
Result:= True;
end;
end; [/no][/more]

Добавлено:
Victor_Dobrov

Цитата:
я решил проблему с изменением скрипта препроцессором
-- да, но все равно, поиск осуществляется только выше точки вызова. А проблема, насколько я понял, была именно в том, что искать необходимо ниже (в секции [Tasks]):
Цитата:
Проблема в том, что Find ищет только до текущей строки, а секция [Tasks] расположена ниже.

Либо я не понял задачи. Впрочем, если результат тебя устраивает, значит все в порядке
Автор: Meceniy
Дата сообщения: 05.09.2008 21:21
Привет Всем! а можете подсказать как убрать синий фон с установщика?
скрин: http://s47.radikal.ru/i118/0809/57/97821a495385.jpg
код: http://ifolder.ru/8000587
Плиз подскажите , а то я чё-то понять не могу или просто не знаю.

Сори - нашел свою ошибку
Автор: Sampron
Дата сообщения: 05.09.2008 23:07
Meceniy
Ищи в справке по слову BackColor.
Автор: Artem_Butenko
Дата сообщения: 06.09.2008 00:36
Genri -- большое спасибо, именно это я имел ввиду.
Автор: LOGANXFI
Дата сообщения: 06.09.2008 08:04
Привет !
Я на вашем форуме недавно , так как инсталяторами стал интересоваться в последнее время.
Почитал немного постов и уже мозг начинает лопаться ,так как сам в програмировании не очень шарю.
Поэтому решил к вам обратиться за помощью , очень надеюсь что вы мне поможете !
Попытаюсь изложить суть вопроса.


Мне нужно создать самоустанавливающийся архивчик с дополнением к игре размером около 4-5 гб.

Вот примерный сценарий установки.

1.
Запускаю инсталятор(архив) , перед установкой он ищет в реестре где установлена игра.
Например в реестре она находиться (смотрел на примере уже установленной игры)

HKEY_LOCAL_MACHINE\SOFTWARE\ПРОИЗВОДИТЕЛЬ\ИГРА\

Далее есть такие параметры указывающие на расположение игры

ЕХEStringS C:\ИГРА\wars2sp.exe
ЕХEStringM C:\ИГРА\wars2mp.exe
InstallPath C:\ИГРА\
UninstallString C:\ProgramFiles\InstalShield Information\{циферки и буковки}\uninstal.exe -runfromtemp -|0x0...
Version 1.0

2.
Далее он смотрит есть ли на том диске где установлена игра свободное место , если нет то говорит что нету места и заканчивает установку.
Причем он не должен спрашивать хотите ли вы установить в другое место !

3.
Если место есть , то далее он проверяет системные требование.
Но здесь мне нужно чтобы он проверял лишь один параметр , а именно IP адрес.
Это реально ?
Мне нужно чтобы инсталятор прекращал установку если IP адрес компа на котором хотят установить дополнение совпадает с одним из адресов указанные в скрипте.

Допустим 5 адресов указано в скрипте.

11.111.1.111
22.222.2.222
33.333.3.333
44.444.4.444
55.555.5.555



4.
Адреса не совпали и он может продолжить установку.
Удаляет из папки где находиться игра старые файлы , и желательно чтобы удаление проходило по списку который будет размещен в скрипте.

например 2 файла и одна папка.

ИГРА\wars2.exe
ИГРА\wars2_2.exe
ИГРА\ПапкаData

Конечно проще их перезаписать,но в моем архиве название файлов другое.
В папке дата версии файлов и название может быть другое , а мне нужно наверняка
знать что все в папке "дата" удалено.
Дабы избежать появления в дальнейшем разных багов.


5.
Нужна защита от многократного использования !
Ну и хотелось бы чтобы инсталятор красиво выглядел типа Corona , но это не главное.
Главное скрипт распознающий место куда распаковывать архив и защита по IP.


Ну вроде все , надеюсь понятно описал ворос.
_______________________________________________________________________

Пожалуйста ребята не игнорируйте мое сообщение , помогите со скриптом !!!
_______________________________________________________________________


Автор: Diawer
Дата сообщения: 06.09.2008 12:13
Я задавал этот вопрос и искал по форуму, найти именно это не удалось, может кто знает как дополнить [more=код][Setup]
AppName=My Prog
AppVerName=My Prog
DefaultDirName={pf}\My Prog
DefaultGroupName=My Prog

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: compiler:ISTask.dll; DestDir: {tmp}; Flags: dontcopy

[Code_]
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
If RunTask('Compil32.exe', false) then //запущенный Inno Setup - что бы код сработал сразу
begin
if MsgBox('Обнаружен запущенный экземпляр My Prog.'#13#13'Пожалуйста, закройте все экземпляры приложения, затем'#13#13'нажмите «OK», чтобы продолжить, или «Отмена», чтобы выйти.', mbError, mb_OkCancel) = idCancel then
Exit;
end;
Result:=True;
end; [/more] - появляется окно с предложением "Сначала выгрузить", надо что бы нажимая на кнопку "OK",
окно Не Закрывалось если программа Compil32.exe не выгружена (то есть нажималась в холостую) до момента закрытия
Compil32.exe пользователем. Соответственно после выгрузки Compil32.exe, установка продолжалась.
Автор: maxdddca123
Дата сообщения: 06.09.2008 12:48
Подскажите как при не выбранном переключателе
[Tasks]
Name: CryptoPro; Description: Настроить на крипто про; Flags: unchecked

пропустить созданную страницу
Page := CreateInputOptionPage(wpSelectTasks,
'Настройка на Крипто Про', 'На этой странице необходимо выбрать дополнительные опции перехода на Крипто Про',
'Отметьте галочками те организации, которые Вы хотите перевести на Крипто Про, затем нажмине Далее',
False, True);

Добавлено:
И ещё вопрос ? Как удалить CheckBox из NewCheckListBox ? Т.е. как сделать функцию обратную AddCheckBox ???
Автор: ComradG
Дата сообщения: 06.09.2008 17:31
Sampron
В оригинале скрипт выглядит у меня так
[more]
[Setup]
AppName=My Prog
AppVerName=My Prog
DefaultDirName={pf}\My Prog

[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}";

[_Code]
var
R1, R2: TRadioButton;
Button, CancelButton: TButton;

procedure ButtonOnClick(Sender: TObject);
var
ResultCode: integer;
ResultStr: string;
begin
if RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\My Prog_is1', 'UninstallString', ResultStr)
then begin
if ResultStr<>''
then begin
ResultStr:=RemoveQuotes(ResultStr)
if not Exec(ResultStr, '/silent', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
then
MsgBox('Uninstall Error.' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Probably files that need to uninstall was removed or renamed.', mbError, MB_OK);
end;
end;
WizardForm.Close;
end;

procedure CancelButtonClick(CurPageID: integer; var Cancel, Confirm: Boolean);
begin
Confirm:=false;
Cancel:=true;
end;

procedure R1OnClick(Sender: TObject);
begin
if R1.Checked then
begin
WizardForm.NextButton.Show;
WizardForm.NextButton.Enabled:=true;
Button.Enabled:=false;
Button.Hide;
end;
end;

procedure R2OnClick(Sender: TObject);
begin
if R2.Checked then
begin
CancelButton:=WizardForm.CancelButton;
WizardForm.NextButton.Hide;
WizardForm.NextButton.Enabled:=false;
Button:=TButton.Create(WizardForm);
Button.Left:=ScaleX(327);
Button.Top:=CancelButton.Top;
Button.Width:=ScaleX(75);
Button.Height:=ScaleY(23);
Button.Caption:='Next >';
Button.Default:=true;
Button.Parent:=WizardForm;
with Button do
OnClick:=@ButtonOnClick;
end;
end;

procedure CurPageChanged(CurPageID: integer);
begin
if CurPageID = wpReady then {страница, которая последует за wpSelectDir}
begin
WizardForm.BackButton.Enabled:=true;
end else
begin
if CurPageID = wpSelectDir then
begin
if RegValueExists(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\My Prog_is1', 'InstallLocation') then
begin
R1:=TRadioButton.Create(WizardForm);
    R2:=TRadioButton.Create(WizardForm);
with WizardForm do
begin
PageNameLabel.Caption:='Already Installed';
    PageDescriptionLabel.Caption:='Choose the maintenance option to perfom.';
    SelectDirLabel.Hide;
    DirEdit.Hide;
    DirBrowseButton.Hide;
    DiskSpaceLabel.Hide;
    BackButton.Enabled:=false;
    SelectDirBrowseLabel.Left:=ScaleX(0);
    SelectDirBrowseLabel.Top:=ScaleY(1);
    SelectDirBrowseLabel.Width:=ScaleX(417);
    SelectDirBrowseLabel.Height:=ScaleY(31);
    SelectDirBrowseLabel.AutoSize:=false;
    SelectDirBrowseLabel.WordWrap:=true;
    SelectDirBrowseLabel.Caption:='My Prog is already installed. Select the operation you want to perfom and click Next to continue.';
end;
with R1 do
begin
     Left:=ScaleX(21);
     Top:=ScaleY(73);
     Width:=ScaleX(145);
     Checked:=true;
     OnClick:=@R1OnClick;
     Caption:='Add/Reinstall components';
     Parent:=WizardForm.SelectDirPage;
    end;
with R2 do
begin
     Left:=ScaleX(21);
     Top:=ScaleY(103);
     Width:=ScaleX(145);
     OnClick:=@R2OnClick;
     Caption:='Uninstall';
     Parent:=WizardForm.SelectDirPage;
    end;
end;
end;
end;
end;
[/more], но то что предлагаешь ты по-моему гораздо изящней и функциональней.

Добавлено:
Кстати, напомните, ПОЖАЛУЙСТА, как вяжется Комбо с прочими элементами.
Автор: LOGANXFI
Дата сообщения: 06.09.2008 22:31
На мой вопрос ктонибудь ответит ?
Помочь в создании моего скрипта слишком сложно для вас ?
Смогу ли я вообще получить помощь на этом форуме ?
Автор: Artem_Butenko
Дата сообщения: 07.09.2008 11:05
Друзья, я уже задавал подобный вопрос, но на него никто не ответил. Повторюсь: в патчах к игровым приложениям (например, Bioshock, Ghost Recon Advanced Warfigter) локализованных Уважаемой отечественной фирмой используется универсальный патчер xPatch, работающий через Inno Setup. Так вот, что это, закрытая разработка или нечто подобное можно реализовать самостоятельно? Отзовитесь у кого есть базовая информация, просто гложит научный интерес!

Добавлено:
ComradG - ранее Вы писали, что с полученного (в результате распаковки некоторого инсталлятора Inno Unpacker) .bin файла можно снять дамп и получить вполне читабельную секцию [Code]. Так вот, кроме шуток, какой утилитой следует снимать дамп, неужели поможет PEID? Пожалуйста отнеситесь серьезно к моему вопросу!
Автор: LOGANXFI
Дата сообщения: 07.09.2008 13:03
Где можно посмотреть готовые скрипты и краткое описание их?
И еще как запускать скин Corona ?

Такое ощущение что я на другом языке говорю и меня не кто не понимает.
Я всегда считал что на форумах люди помогают друг другу , а здесь что-то игнорирование какое-то.
Хоть что-то бы ответили.
Автор: Victor_Dobrov
Дата сообщения: 07.09.2008 13:58
LOGANXFI

Цитата:
Где можно посмотреть готовые скрипты и краткое описание их?
В шапке и сообщениях этого и предыдущих топиков.

Цитата:
как запускать скин Corona ?
Цитата из ReadmeRus.rtf: для сборки необходим Inno Setup Preprocessor. Cсылка в шапке: cкачать Preprocessor

Цитата:
Я всегда считал что на форумах люди помогают друг другу , а здесь что-то игнорирование какое-то.
Сейчас дачный сезон, вот зимой ответы будут приходить быстрее вопросов

Цитата:
Мне нужно создать самоустанавливающийся архивчик с дополнением к игре размером около 4-5 гб.
Пока вы ждёте, что кто-то выполнит заказ, у вас есть время изучить Inno Setup, ведь именно для этого и предназначена тема.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Презентация


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.