PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 [85] 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105

Temyraz@fb
26-04-2012, 14:10
у меня вот какой вопрос
есть такая команда
function NextButtonClick(CurPageID: Integer): Boolean;
var filecontent: String;
ReturnCode: Integer;


begin
Result := True;
if CurPageID = DataDirPage.ID then begin
if FileExists ( DataDirPage.Edits[0].Text + '\psql.exe' ) then
begin
Result := True;
PathToPsql := DataDirPage.Edits[0].Text;
end
else
begin
MsgBox(ExpandConstant('{cm:msgNotFoundPsql}'), mbError, MB_OK);
Result := False;
end;
end;
вот как сделать чтоб при
begin
if CheckBoxA.Checked = true then
begin
не проверялось наличия уже существующей папки
а при
if CheckBoxB.Checked = true then
begin
проверялась
а?

Lancher
27-04-2012, 11:44
Подскажите плиз, как сделать установщик одним файлом более 2.1 гигов?

Johny777
27-04-2012, 14:11
Lancher,
стандартными средствами инно никак
воспользуйся внешними упаковщиками типа is7zip.dll или фриарк или ещё чем-нибудь
подробнее здесь http://forum.ru-board.com/topic.cgi?forum=5&topic=32025
Temyraz@fb
я ж тебе в скрипте так и сделал
если чекбокс А отмечен то в function NextButtonClick выполняется это на той ли иной странице при нажатии на кнопку "далее"
если чекбокс Б отмечен, то выполняется другое.
Ты хоть разбирал что к чему? Я старался не для того чтоб ты просто скомпилил и использовал, а чтоб ты посмотрел как оно сделано, понял, и смог при желании осмысленно воспроизвести :(

Temyraz@fb
27-04-2012, 14:24
я и разобрался, много чего сделал. исправил. но все же не хочет этот момент сделать.

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "Synergy Center"
#ifndef MyAppVer
#define MyAppVer "2.4"
#endif
#ifndef MyAppPatch
#define MyAppPatch "11"
#endif
#ifndef MyAppBuild
#define MyAppBuild "0"
#endif
#define MyAppPublisher "??? ???????? ??????? ?????????? ?????"

#define MyAppURL "http://www.ivt.su/"
#define InstalledLocalURL "http://localhost"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{903E5749-D9EC-45A3-A5E1-B0621695F680}
AppName={#MyAppName}
AppVerName={#MyAppName} {#MyAppVer}.{#MyAppPatch}
VersionInfoVersion={#MyAppVer}.{#MyAppPatch}.{#MyAppBuild}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=D:\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir={#MyOutputDir}
UpdateUninstallLogAppName=no
UsePreviousAppDir=yes
CreateUninstallRegKey=no
;DisableDirPage=yes

OutputBaseFilename=Synergy Center0 {#MyAppVer}.{#MyAppPatch}
Compression=lzma
SolidCompression=yes
WizardImageFile=wizard\WizModernImage-IS.bmp
WizardSmallImageFile=wizard\WizModernSmallImage-IS.bmp

[Languages]
Name: ru; MessagesFile: i18n\Russian.isl,i18n\sc_russian.isl; LicenseFile: dontcopy\license_ru.rtf
Name: ua; MessagesFile: i18n\Ukrainian-6-5.1.11.isl,i18n\sc_ukrainian.isl; LicenseFile: dontcopy\license_ua.rtf

[Registry]
Root: HKLM; Subkey: Software\IVTBelGU\Synergy Center; ValueType: string; ValueName: Version; ValueData: {#MyAppVer}.{#MyAppPatch}; Check: Run_B; Flags: uninsdeletekey

[Dirs]
Name: {app}\apache-tomcat; Flags: uninsneveruninstall; Check: Run_B; Languages:
Name: {app}\files; Flags: uninsneveruninstall; Check: Run_B; Languages:
Name: {app}\nginx; Flags: uninsneveruninstall; Check: Run_B; Languages:
Name: {app}\dbinit; Flags: uninsneveruninstall; Check: Run_B; Languages:
Name: {app}\backups; Flags: uninsneveruninstall; Check: Run_B; Languages:
Name: {app}\db_update; Flags: uninsneveruninstall; Check: Run_A; Languages:
Name: {app}\backups; Flags: uninsneveruninstall; Check: Run_A; Languages:
[InstallDelete]
Name: {app}\apache-tomcat\bin\service.bat; Type: filesandordirs; Check: Run_A; BeforeInstall: StopTomcat
Name: {app}\apache-tomcat\work\*; Type: filesandordirs; Check: Run_A; BeforeInstall: StopTomcat
Name: {app}\apache-tomcat\webapps\ROOT\WEB-INF\classes\su\*; Type: filesandordirs; Check: Run_A; BeforeInstall: StopTomcat
Name: {app}\apache-tomcat\webapps\ROOT\WEB-INF\classes\i18n\*; Type: filesandordirs; Check: Run_A; BeforeInstall: StopTomcat
Name: {app}\apache-tomcat\webapps\ROOT\WEB-INF\lib\*; Type: filesandordirs; Check: Run_A; BeforeInstall: StopTomcat

[Files]
Source: apache-tomcat\*; DestDir: {app}\apache-tomcat; Check: Run_B; Flags: ignoreversion recursesubdirs createallsubdirs
Source: apache-tomcat\msvcr71.dll; DestDir: {sys}\; Check: Run_B; Flags: onlyifdoesntexist
Source: {#MyWebContentPath}\*; DestDir: {app}\apache-tomcat\webapps\ROOT; Check: Run_B; Flags: ignoreversion recursesubdirs createallsubdirs
Source: download\*; DestDir: {app}\apache-tomcat\webapps\ROOT\public\download\; Check: Run_B; Flags: ignoreversion recursesubdirs createallsubdirs
Source: configs\WEB-INF\settings.properties; DestDir: {app}\apache-tomcat\webapps\ROOT\WEB-INF\; Check: Run_B; Flags: ignoreversion; AfterInstall: ReplacePathInConfigs
Source: configs\WEB-INF\classes\log4j.xml; DestDir: {app}\apache-tomcat\webapps\ROOT\WEB-INF\classes\; Check: Run_B; Flags: ignoreversion; AfterInstall: ReplacePathInConfigs
Source: configs\nginx_to_autorun.reg; DestDir: {app}\nginx\; Check: Run_B; Flags: ignoreversion; AfterInstall: ReplacePathInConfigsReg
Source: nginx\add_reg.bat; DestDir: {app}\nginx\; Check: Run_B; Flags: ignoreversion; AfterInstall: ReplacePathInConfigsReg
Source: nginx\*; DestDir: {app}\nginx; Check: Run_B; Flags: ignoreversion recursesubdirs createallsubdirs
Source: dbinit\*; DestDir: {app}\dbinit; Check: Run_B; Flags: ignoreversion recursesubdirs; AfterInstall: ReplacePathInConfigsPass
Source: UserMenu\*; DestDir: {app}; Check: Run_B; Flags: ignoreversion recursesubdirs; Languages: ; AfterInstall: ReplacePathInConfigs
Source: {#MySetupDbPath}\db\*.sql; DestDir: {app}\dbinit; Check: Run_B; Flags: ignoreversion




Source: {app}\apache-tomcat\webapps\ROOT\*; DestDir: {app}\backups\Webcontent-before-{#MyAppVer}.{#MyAppPatch}-{code:GetTodaysName}; Check: Run_A; Flags: ignoreversion recursesubdirs createallsubdirs external uninsneveruninstall; Components: backup_app
Source: {#MyWebContentPath}\*; DestDir: {app}\apache-tomcat\webapps\ROOT; Check: Run_A; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: StopTomcat
Source: download\*; DestDir: {app}\apache-tomcat\webapps\ROOT\public\download\; Check: Run_A; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: AddDefaultToConfig
Source: apache-tomcat\bin\service.bat; DestDir: {app}\apache-tomcat\bin\; Check: Run_A; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: AddDefaultToConfig
Source: configs\WEB-INF\settings.properties; Check: Run_A; Flags: dontcopy
;Source: configs\WEB-INF\classes\log4j.xml; DestDir: {app}\apache-tomcat\webapps\ROOT\WEB-INF\classes\; Flags: ignoreversion; AfterInstall: ReplacePathInConfigs
Source: db_update\*; DestDir: {app}\db_update; Check: Run_A; Flags: ignoreversion recursesubdirs createallsubdirs; Languages:
;Source: D:\work\_Stable\setup\db\update\{#MyAppVer}\*.sql; DestDir: {app}\db_update\sql_scripts; Flags: ignoreversion
Source: {#MySetupDbPath}\db\*.sql; DestDir: {app}\db_update\sql_scripts; Check: Run_A; Flags: ignoreversion recursesubdirs createallsubdirs

Source: dontcopy\netstat1.bat; Flags: dontcopy
Source: dontcopy\check.bat; Check: Run_A; Flags: dontcopy
Source: dontcopy\check.bat; Check: Run_B; Flags: dontcopy

[Icons]
Name: {group}\{#MyAppName}; Check: Run_B; Filename: {#InstalledLocalURL}
;Name: {group}\Start Tomcat; Filename: {app}\TomcatServiceStart.exe; WorkingDir: {app}\; Comment: {cm:RunTomcat}; Flags: runminimized; Components:
;Name: {group}\Stop Tomcat; Filename: {app}\TomcatServiceStop.exe; WorkingDir: {app}\; Comment: {cm:StopTomcat}; Flags: runminimized
Name: {group}\{cm:AdminManual}; Filename: {app}\apache-tomcat\webapps\ROOT\public\download\User_Manual\Manual_PDF\admin_manual.pdf; Check: Run_B; Languages: ru
Name: {group}\{cm:UserManual}; Filename: {app}\apache-tomcat\webapps\ROOT\public\download\User_Manual\Manual_PDF\user_manual.pdf; Check: Run_B; Languages: ru
Name: {group}\{cm:AdminManual}; Filename: {app}\apache-tomcat\webapps\ROOT\public\download\User_Manual\ua\manual_admin.pdf; Check: Run_B; Languages: ua
Name: {group}\{cm:UserManual}; Filename: {app}\apache-tomcat\webapps\ROOT\public\download\User_Manual\ua\manual_user.pdf; Check: Run_B; Languages: ua
Name: {group}\{cm:Rukovodstvo_administratora}; Check: Run_B; Filename: {app}\apache-tomcat\webapps\ROOT\public\download\User_Manual\Manual_PDF\Rukovodstvo_administratora.pdf
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Check: Run_B; Filename: {uninstallexe}






[Run]
Filename: {app}\apache-tomcat\bin\service.bat; Parameters: " install"; WorkingDir: {app}\apache-tomcat\bin\; Flags: runhidden; Check: Run_B; StatusMsg: Installing Apache Tomcat as Service
Filename: NET; Parameters: "START ""Apache Tomcat"""; Flags: runhidden; Components: PostgreSQL; Check: Run_B; StatusMsg: {cm:StartingTomcat}
Filename: {app}\dbinit\createAndInitDb.bat; Parameters: """{code:GetPsqlPath}"" {language}"; WorkingDir: {app}\dbinit\; Flags: shellexec runhidden waituntilterminated; Check: Run_B; Components: PostgreSQL; StatusMsg: {cm:CreatingDatabase}
Filename: {app}\nginx\add_reg.bat; Check: Run_B; Flags: shellexec runhidden
Filename: {app}\start_nginx.bat; Check: Run_B; Flags: shellexec runhidden
Filename: {app}\dbinit\installAdditionalCards.bat; Parameters: """{code:GetPsqlPath}"" {language}"; WorkingDir: {app}\dbinit\; Check: Run_B; Flags: shellexec runhidden waituntilterminated; Components: PostgreSQL; StatusMsg: {cm:CreatingDatabase}; Tasks: IntstallDefaultShemes
Filename: {app}\Synergy Center.url; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent shellexec; Check: Run_B; Components: PostgreSQL


;Filename: {app}\postgresql\bin\pg_dump.exe; Parameters: "-h localhost -p 5432 -U postgres -F c -b -v -f ""{app}\backups\db-before-{#MyAppVer}.{#MyAppPatch}-{code:GetTodaysName}.backup"" sc"; Flags: waituntilterminated; StatusMsg: ????? ??????? ??; Components: backup_db
Filename: {app}\apache-tomcat\bin\service.bat; Parameters: " remove"; WorkingDir: {app}\apache-tomcat\bin\; Check: Run_A; Flags: runhidden
Filename: {app}\apache-tomcat\bin\service.bat; Parameters: " install"; WorkingDir: {app}\apache-tomcat\bin\; Check: Run_A; Flags: runhidden
Filename: {app}\db_update\make_db_backup.bat; WorkingDir: {app}\; Flags: shellexec waituntilterminated; StatusMsg: StatusMsg: {cm:BackupingCurrentDB}; Check: Run_A; Components: backup_db
;Filename: NET; Parameters: "STOP ""Apache Tomcat"""; Flags: runhidden; StatusMsg: {cm:StoppingTomcat}
Filename: {app}\db_update\run_db_update.bat; WorkingDir: {app}\db_update\; Flags: shellexec waituntilterminated; Check: Run_A; StatusMsg: {cm:UpdatingDatabase}
;Filename: java; Parameters: " -jar --patches_path=""./sql_scripts/"" --log=""./sql_scripts/sql_scripts_log.log"" --sc_properites_path=""{app}/apache-tomcat/webapps/ROOT/WEB-INF/settings.properties"" "; WorkingDir: {app}\db_update\; Flags: shellexec waituntilterminated; StatusMsg: {cm:UpdatingDatabase}
;Filename: rmdir; Parameters: "/S /Q ""{app}\apache-tomcat\work\Catalina\"""; Flags: shellexec runhidden; StatusMsg: {cm:StartingTomcat}
Filename: NET; Parameters: "START ""Apache Tomcat"""; Flags: runhidden; Check: Run_A; StatusMsg: {cm:StartingTomcat}





[Components]
Name: Tomcat; Description: {cm:ApacheTomcatComponent}; Flags: fixed; Types: custom compact full; Check: Skips
Name: PostgreSQL; Description: {cm:PostgresComponent}; Types: custom full; Flags: checkablealone; ExtraDiskSpaceRequired: 16080384; Check: Skips; Languages:

Name: backup_db; Description: {cm:MakeDBBackupComponent}; Flags: checkablealone; Types: custom full; Languages: ; ExtraDiskSpaceRequired: 5000000; Check: Skip
Name: backup_app; Description: {cm:MakeApplicationBackupComponent}; Flags: checkablealone; Types: custom full; ExtraDiskSpaceRequired: 50000000; Check: Skip

[Tasks]
Name: IntstallDefaultShemes; Description: {cm:IntstallDefaultShemes}; Flags: checkablealone; Components: Postgresql; Languages:


[ Code]

var
CheckBoxA: TNewCheckBox;
CheckBoxB: TNewCheckBox;

PasswordPage: TInputQueryWizardPage;
DataDirPage: TInputDirWizardPage;

UserVarPass: String;
PathToPsql: String;
CheckLicense: TNewCheckBox;


procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
S: TArrayOfString;
i : Integer;
begin
if not FileExists(FilePath) then begin MsgBox('Oaee ia iaeaai ' + FilePath, mbError, mb_Ok); Exit;end; // anee oaeea iao, auoiaei
LoadStringsFromFile(FilePath, S);
for i:= 0 to GetArrayLength(S)-1 do begin
if (Pos(AnsiUpperCase(find), AnsiUpperCase(S[i])) > 0) then begin
StringChangeEx(S[i], find, replace, True);
end;
end;
SaveStringsToFile(FilePath, S, False); // nio?aiyai oaee
end;

procedure ReplacePathInConfigsReg();
var filecontent: String;
var pathForConfig: String;
var langForConfig: String;
begin
LoadStringFromFile(ExpandConstant(CurrentFileName), filecontent);
langForConfig:=ExpandConstant('{language}');
pathForConfig:=ExpandConstant('{app}');
StringChange(pathForConfig,'\','\\');
StringChange(filecontent,'{INSTALL_PATH}',pathForConfig);
StringChange(filecontent,'{LANGUAGE}',langForConfig);
SaveStringToFile(ExpandConstant(CurrentFileName), filecontent, false);
end;

function CheckPortUsing(Port: String; fileStrings: TArrayOfString): Boolean;
var i: Integer;
begin
for i:=0 to GetArrayLength(fileStrings)-1 do
begin
if ((Pos(':'+Port+' ',fileStrings[i])>0) and (Pos('LISTENING',fileStrings[i]) >0)) then
begin
Result := true;
exit;
end;
end;
Result := false;
end;



procedure LicenseOnClick(Sender: TObject);
begin
WizardForm.NextButton.Enabled := false;
if (CheckLicense.Checked) = True then

begin
WizardForm.LicenseAcceptedRadio.Checked := True;
WizardForm.NextButton.Enabled := True;
end else
begin
WizardForm.LicenseNotAcceptedRadio.Checked := True;
WizardForm.NextButton.Enabled := False;
end;
end;


function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageID of
wpLicense: Result := True;
end;
end;




function GetBuildNumber(param: String): String;
var
BuildVersion: String;
begin
LoadStringFromFile(ExpandConstant('buildNumber.txt'), BuildVersion);
Result := BuildVersion;
end;




function GetPsqlPath(Param: String): String;
begin
Result := PathToPsql + '\psql.exe';
end;

procedure ReplacePathInConfigs();
var filecontent: String;
var pathForConfig: String;
var langForConfig: String;
begin
LoadStringFromFile(ExpandConstant(CurrentFileName), filecontent);
langForConfig:=ExpandConstant('{language}');
pathForConfig:=ExpandConstant('{app}');
StringChange(pathForConfig,'\','/');
StringChange(filecontent,'{INSTALL_PATH}',pathForConfig);
StringChange(filecontent,'{LANGUAGE}',langForConfig);
SaveStringToFile(ExpandConstant(CurrentFileName), filecontent, false);
end;



procedure ReplacePathInConfigsPass();
var filecontent: String;
begin
LoadStringFromFile(ExpandConstant(CurrentFileName), filecontent);
StringChange(filecontent,'{PG_PASS}',UserVarPass);
SaveStringToFile(ExpandConstant(CurrentFileName), filecontent, false);
end;




procedure StopTomcat();
var
ErrorCode: Integer;
begin
if not Exec('NET',' STOP "Apache Tomcat"', '' ,SW_HIDE, ewWaitUntilTerminated, ErrorCode) then
begin
MsgBox('Fail to stop tomcat', mbInformation, mb_Ok);
end;
end;





function CheckDBUpdateIsOk(): Boolean;
var filecontent: String;
var pathToLog: String;
begin
Result:= false;
pathToLog:=ExpandConstant('{app}')+'\db_update\db_update_log.log';
LoadStringFromFile(pathToLog, filecontent);
if (Pos('Update succesfully',filecontent)>0) then
begin
Result:= true;
end

end;


procedure CurPageChanged(CurPageID: Integer);
var ResultCode: Integer;
Begin
if CurPageID=wpWelcome then
begin
WizardForm.NextButton.Enabled := False;
end;
end;





procedure AddDefaultToConfig();
var filecontent_default: String;
var configStrings,defaultStrings: TArrayOfString;
var pathToConfig,pathToDefaultConfig,appPath: String;
var langForConfig,currentKey: String;
var currentPos,i,j: Integer;
var containKey: Boolean;
begin

ExtractTemporaryFile('settings.properties');
pathToConfig:=ExpandConstant('{app}')+'\apache-tomcat\webapps\ROOT\WEB-INF\settings.properties';
pathToDefaultConfig:=ExpandConstant('{tmp}\settings.properties');
appPath:=ExpandConstant('{app}');
langForConfig:=ExpandConstant('{language}');

LoadStringFromFile(pathToDefaultConfig, filecontent_default);
StringChange(appPath,'\','/');
StringChange(filecontent_default,'{INSTALL_PATH}',appPath);
StringChange(filecontent_default,'{LANGUAGE}',langForConfig);
SaveStringToFile(pathToDefaultConfig, filecontent_default, false);

LoadStringsFromFile(pathToDefaultConfig, defaultStrings);

LoadStringsFromFile(pathToConfig, configStrings);

for i:=0 to GetArrayLength(defaultStrings)-1 do
begin
currentPos:=Pos('=',defaultStrings[i]);
if ((currentPos>0)) then
begin
currentKey:=Trim(Copy(defaultStrings[i], 0, currentPos-1));
containKey:=false;
for j:=0 to GetArrayLength(configStrings)-1 do
begin
if ((Pos(currentKey,configStrings[j])>0)) then
begin
containKey:=true;
end;
end;
if (containKey=false) then
begin

SetArrayLength(configStrings, GetArrayLength(configStrings)+1);
configStrings[GetArrayLength(configStrings)-1]:=defaultStrings[i];
end
end;
end;
SaveStringsToFile(pathToConfig, configStrings, false);
end;


var
TodaysName : String;

function GetToday : String;
begin
Result := GetDateTimeString ('yyyy.mm.dd hh.nn.ss', '-', #0);
end;

function GetTodaysName (Param: String): String;
begin
if ('' = TodaysName) then
begin
TodaysName := GetToday ();
end;
Result := TodaysName;
end;







function Run_A: Boolean; begin Result:=CheckBoxA.Checked; end;
function Run_B: Boolean; begin Result:=CheckBoxB.Checked; end;


Function InitializeSetup: Boolean;
var ResultCode: Integer;
var fileStrings: TArrayOfString;
var pathToOutput: String;
var outputFile: String;

var
ReturnCode: Integer;



begin
if RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\Corssys\Synergy Center') or
RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\IVTBelGU\Synergy Center')
then
begin
if MsgBox('Сообщение' + #10#13 +
'Установить обновление Synergy Center?', mbError, MB_YESNO) = idYes
then
begin
MsgBox(ExpandConstant('Сейчас будет устанавливаться обновление Synergy Center'), mbInformation, mb_Ok);
Result := true;
end

else
begin
MsgBox(ExpandConstant('Сообщение' #13#10 'Не возможно установить Synergy Center, удалите предыдушую верисю и повторите попытку'), mbInformation, mb_Ok);
Result := false;
exit;
end;

end
else
Begin
MsgBox(ExpandConstant('Сейчас будет устанавливаться Synergy Center'), mbInformation, mb_Ok);
If (ExpandConstant('{reg:HKLM\Software\JavaSoft\Java Runtime Environment,CurrentVersion}') = '1.6')
then
Result:= True
else MsgBox(ExpandConstant('{cm:SetupJRE}'), mbInformation, mb_Ok);
outputFile:=ExpandConstant('{tmp}\netstatoutput.log');
pathToOutput:=ExpandConstant('{tmp}\');
ExtractTemporaryFile('netstat1.bat');
if Exec(ExpandConstant('{tmp}\netstat1.bat'), 'netstatoutput.log', pathToOutput, SW_HIDE, ewWaitUntilTerminated, ResultCode)
then
begin
//MsgBox(outputFile, mbInformation, mb_Ok);
// handle success if necessary; ResultCode contains the exit code
LoadStringsFromFile(outputFile, fileStrings);
DeleteFile(outputFile);
DeleteFile(ExpandConstant('{tmp}\netstat1.bat'));
If (CheckPortUsing('80',fileStrings) and (Result=true)) then
begin
Result := MsgBox(ExpandConstant('{cm:Port80InUse}'), mbConfirmation, MB_YESNO) = idYes;
end
end
else
begin
MsgBox('Error ', mbInformation, mb_Ok);
end
Result := true;

end
End;

procedure InitializeWizard;
begin
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.LicenseNotAcceptedRadio.Hide;
WizardForm.LicenseAcceptedRadio.Hide;
{ CheckLicense }
CheckLicense := TNewCheckBox.Create(WizardForm);
with CheckLicense do
begin
Name := 'CheckLicense';
Parent := WizardForm.WelcomePage;
Left := ScaleX(176);
Top := ScaleY(288);
Width := ScaleX(200);
Height := ScaleY(17);
OnClick := @LicenseOnClick;
CheckLicense.Caption := WizardForm.LicenseAcceptedRadio.Caption;
end;

with WizardForm.LicenseMemo do
begin
Left := ScaleX(164);
Top := ScaleY(0);
Width := ScaleX(333);
Height := ScaleY(284);
Parent := WizardForm.WelcomePage;
end;
CheckLicense.Checked := false;

DataDirPage := CreateInputDirPage(wpSelectDir, ExpandConstant('{cm:DirSelectCaption}'), ExpandConstant('{cm:DirSelectDescription}'), ExpandConstant('{cm:DirSelectSubCaption}'), False, '' );
DataDirPage.Add('');
DataDirPage.Values[0] := GetPreviousData('DataDir', 'C:\Program Files\PostgreSQL\9.0\bin');

PasswordPage := CreateInputQueryPage(DataDirPage.ID, ExpandConstant('{cm:PasswordInputCaption}') ,ExpandConstant('{cm:PasswordInputDescription}'), ExpandConstant('{cm:PasswordInputSubCapton}') );
PasswordPage.Add(SetupMessage(msgPasswordEditLabel), True);


{ CheckBoxA }
CheckBoxA := TNewCheckBox.Create(WizardForm);
with CheckBoxA do
begin
Name := 'CheckBoxA';
Parent := WizardForm.WelcomePage;
Left := ScaleX(216);
Top := ScaleY(176);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := '??????? 1';
end;
{ CheckBoxB }
CheckBoxB := TNewCheckBox.Create(WizardForm);
with CheckBoxB do
begin
Name := 'CheckBoxB';
Parent := WizardForm.WelcomePage;
Left := ScaleX(216);
Top := ScaleY(208);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := '??????? 2';
end;

if RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\Corssys\Synergy Center') or
RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\IVTBelGU\Synergy Center')
then
begin

CheckBoxA.Enabled:=true;
CheckBoxA.Checked:=true;

CheckBoxB.Enabled:=false;
CheckBoxB.Checked:=false;
end

else
begin
CheckBoxA.Enabled:=false;
CheckBoxA.Checked:=false;

CheckBoxB.Enabled:=true;
CheckBoxB.Checked:=true;
end;
CheckBoxA.visible:=false;
CheckBoxB.visible:=false;


end;


function NextButtonClick(CurPageID: Integer): Boolean;
var filecontent: String;
ReturnCode: Integer;
begin




begin
if CheckBoxA.Checked = true then
begin

If CurPageID = wpSelectDir then
begin
If (FileSearch('settings.properties', ExpandConstant('{app}')+'\apache-tomcat\webapps\ROOT\WEB-INF')='') then
begin
MsgBox(ExpandConstant('{cm:ErrorSCNotFound}'), mbCriticalError, mb_Ok);
Result:=False;
end
end

Result := True;
if CurPageID = DataDirPage.ID then begin
if FileExists ( DataDirPage.Edits[0].Text + '\psql.exe' ) then
begin
Result := True;
PathToPsql := DataDirPage.Edits[0].Text;
DeleteFile(ExpandConstant('{app}\text.txt'))
SaveStringToFile(ExpandConstant('{app}\text.txt'), DataDirPage.Edits[0].Text, True)
end
else
begin
MsgBox(ExpandConstant('{cm:msgNotFoundPsql}'), mbError, MB_OK);
Result := False;
end;
end

if CurPageID = PasswordPage.ID then begin
UserVarPass := PasswordPage.Edits[0].Text;
ExtractTemporaryFile('check.bat');
Exec (ExpandConstant ( '{tmp}\check.bat' ), PasswordPage.Edits[0].Text + ' "' + PathToPsql + '"' , ExpandConstant ( '{tmp}' ), SW_HIDE, ewWaitUntilTerminated, ReturnCode );
if ReturnCode = 0 then
begin
Result := True;
end
else
begin
MsgBox(ExpandConstant('{cm:msgIncorrectPassword}'), mbError, MB_OK);
Result := False;
end;
DeleteFile ( ExpandConstant ('{tmp}\check.bat') );
end;
end
end





if CheckBoxB.Checked = true then
begin
Result := True;
if CurPageID = DataDirPage.ID then begin
if FileExists ( DataDirPage.Edits[0].Text + '\psql.exe' ) then
begin
Result := True;
PathToPsql := DataDirPage.Edits[0].Text;
DeleteFile(ExpandConstant('{app}\text.txt'))
SaveStringToFile(ExpandConstant('{app}\text.txt'), DataDirPage.Edits[0].Text, True)
end
else
begin
MsgBox(ExpandConstant('{cm:msgNotFoundPsql}'), mbError, MB_OK);
Result := False;
end;
end;

begin
if CurPageID = PasswordPage.ID then begin
UserVarPass := PasswordPage.Edits[0].Text;
ExtractTemporaryFile('check.bat');
Exec (ExpandConstant ( '{tmp}\check.bat' ), PasswordPage.Edits[0].Text + ' "' + PathToPsql + '"' , ExpandConstant ( '{tmp}' ), SW_HIDE, ewWaitUntilTerminated, ReturnCode );
if ReturnCode = 0 then
begin
Result := True;
end
else
begin
MsgBox(ExpandConstant('{cm:msgIncorrectPassword}'), mbError, MB_OK);
Result := False;
end;
DeleteFile ( ExpandConstant ('{tmp}\check.bat') );
end;
end;
end;
end;


function Skip:boolean;
var
sz:Integer;
s:string;
begin
Result:=True;
begin
If not RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\Corssys\Synergy Center') or
RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\IVTBelGU\Synergy Center') then
Result:=False
end;
end;
function Skips:boolean;
var
sz:Integer;
s:string;
begin
Result:=True;
begin
If RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\Corssys\Synergy Center') or
RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\IVTBelGU\Synergy Center') then
Result:=False
end;
end;

Temyraz@fb
27-04-2012, 14:39
у меня не получается запретить при чекбокса А проверку наличия папки

Johny777
27-04-2012, 16:31
у меня не получается запретить при чекбокса А проверку наличия папки »
давай думать!
У тебя есть 2 чекбокса. И отмечен может быть только 1 из них.
К каждому чекбоксу, если он отмечен там и сям привязано уникальное действие.
Если папка должна проверяться как ты писал при отмеченном чекбоксе ( CheckBoxB.Checked ), то так тому и быть
Вопрос:
нафига привязывать запрет на проверку в чекбоксу А, если проверка идёт только(!) при отмеченном Б?
Это лишнее:(

Lancher
27-04-2012, 16:39
Lancher,
стандартными средствами инно никак
воспользуйся внешними упаковщиками типа is7zip.dll или фриарк или ещё чем-нибудь
подробнее здесь http://forum.ru-board.com/topic.cgi?forum=5&topic=32025 »
Т.е. как я понимаю, с помощью is7zip он просто сильнее сжимает - да? Но больший размер чем 2.1 быть все равно не может?

Devils Night
27-04-2012, 17:11
Т.е. как я понимаю, с помощью is7zip он просто сильнее сжимает - да? »is7zip по моему вообще библиотека для распаковки 7zip. Жми 7zip-ом, я ужимал им 4 гига и ничего, он не умер.

А вообще полезно справочку почитать

7z формат
7z - новый формат архива, который обеспечивает высокую степень сжатия.

Основные функции 7z формата:

Открытая архитектура
Высокая степень сжатия
Сильное AES-256 кодирование
Способность использовать любое сжатие, преобразование или метод кодирования
Поддержка файлов с размером до 16000000000 Гб
Имена файла в уникоде
Solid сжатие
Сжатие заголовков архива

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

В настоящее время в 7z интегрированы следующие методы

Метод Описание
LZMA Улучшенная и оптимизированная версия LZ77 алгоритма
LZMA2 Метод сжатия основанный на LZMA. Он обеспечивает лучшую поддержку многопоточности, чем LZMA
PPMD PPMdH Дмитрия Шкарина с небольшими изменениями
BCJ Конвертер для 32-разрядных x86 исполнительных программ
BCJ2 Конвертер для 32-разрядных x86 исполнительных программ
BZip2 Стандартный BWT алгоритм
Deflate Стандартный алгоритм основанный на LZ77

LZMA - значение по умолчанию и общий метод сжатия 7z формата. Основные функции LZMA метода:

Высокая степень сжатия
Переменный размер словаря (до 4 Гб)
Скорость сжатия: около 1 Мб/с на 2 ГГц-м процессоре
Скорость распаковки: около 10-20 Мб/с на 2 ГГц-м процессоре
Маленькие требуемые объемы и конфигурации памяти для распаковки (зависят от размера словаря)
Маленький размер кода для распаковки: приблизительно 5 кб
Поддержка многопоточности и P4 с hyper-threading


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

www.7-zip.org/support.html

7-Zip также поддерживает кодирование с AES-256 алгоритмом. Этот алгоритм использует ключ шифра длиной 256 бит. Создавая этот ключ, 7-Zip использует функцию образования, основанную на алгоритме SHA-256 смешивания. Функция образования ключа производит получаемый ключ из текстового пароля, определенного пользователем. Чтобы увеличивать затраты времени для полного перебора паролей 7-Zip использует большое число итераций, чтобы создать ключ шифра из текстового пароля.
http://i1.imageban.ru/thumbs/2012.04.27/7de89759aef0f8e94629de53c0eb0346.png (http://i1.imageban.ru/out/2012/04/27/7de89759aef0f8e94629de53c0eb0346.png)

http://i3.imageban.ru/thumbs/2012.04.27/c683a47dc964d63e24c6c0dcd657c213.png (http://i3.imageban.ru/out/2012/04/27/c683a47dc964d63e24c6c0dcd657c213.png)

MrEugen
27-04-2012, 20:19
Привет, ребята у меня есть ”обложка” для инсталятора в формате .ini как и где положить данные в скрипте чтобы был мой собственный стиль инсталятора а не стандартный? За ранее спасибо

MrEugen
27-04-2012, 20:20
Привет, ребята у меня есть ”обложка” для инсталятора в формате .ini как и где положить данные в скрипте чтобы был мой собственный стиль инсталятора? За ранее спасибо

YURSHAT
27-04-2012, 23:26
в формате .ini »
:o

Devils Night
28-04-2012, 06:22
:o »Полагаю это не скин, а картинки, а выглядит действительно как скин.
SetupPic1 = pic-1.bmp
SetupPic2 = pic-2.bmp
SetupPic3 = pic-3.bmp
SetupPic4 = pic-4.bmp
SetupPic5 = pic-4.bmp
SetupPic6 = pic-4.bmp
SetupPic7 = pic-4.bmp
SetupPic8 = pic-4.bmp Самому интересно узнать такую реализацию.

YURSHAT
28-04-2012, 07:20
Самому интересно узнать такую реализацию. »
А чего там сложного то? ;) Какая разница откуда инсталл будет брать картинки, из темпа или из рядом лежащей папочки к примеру, а адрес изображений будет прописан в инишке :)

Lancher
28-04-2012, 08:29
is7zip по моему вообще библиотека для распаковки 7zip. Жми 7zip-ом, я ужимал им 4 гига и ничего, он не умер.
А вообще полезно справочку почитать
вот отрывок »
Да просто беда в том, что он не ужимается до 2.1 гигов. Уже насоздавал 10ок архивов с разными параметрами сжатия - максимум что удалось ужать - это на 200 метров.
Мне еще интересно - почему в нсисе можно до 4х гигов делать инсталлятор - а в инно нет? Тут же явно не а файловой системе проблема. Мб есть какая-нить отдельная тулза или дллка которая расширяет этот параметр для инно?

Ivan_009
28-04-2012, 08:56
Почему при использовании Tiger.cjstyles + слайдшоу эффект 6 - Fuse неправильно отображается... :( как исправить данную ошибку.

Temyraz@fb
28-04-2012, 10:37
Temyraz@fb
я ж тебе в скрипте так и сделал
если чекбокс А отмечен то в function NextButtonClick выполняется это на той ли иной странице при нажатии на кнопку "далее"
если чекбокс Б отмечен, то выполняется другое.
Ты хоть разбирал что к чему? Я старался не для того чтоб ты просто скомпилил и использовал, а чтоб ты посмотрел как оно сделано, понял, и смог при желании осмысленно воспроизвести »
но все равно делает проверку(((
может я не правильно выражаюсь, извините. но мне нужно чтоб место куда устанавливается приложение делалась проверка, при наличии папки выдавалась сообщение, это при чекбоксе В, а при чекбоксе А нет.
я думаю может этим как то можно похимичить?

Предупреждения при установке в существующую папку
За появление сообщения «Папка … уже существует. Вы хотите продолжить установку в эту папку?»
отвечает директива DirExistsWarning. При DirExistsWarning=auto инсталятор выдаст это сообщение, если
UsePreviousAppDir=no или установка производится в папку впервые. При UsePreviousAppDir=yes
сообщение появится только при первой установке. Если DirExistsWarning=yes, сообщение будет
появляться всегда, а если DirExistsWarning=no, то не будет появляться никогда.

можно ли этим мне помочь?

Johny777
28-04-2012, 11:15
Temyraz@fb,
плохо улавливаю мысль. Ты хочешь при отмеченном Б ставить в ту же папку, если установлено?
Если да то проверка идёт через реестр. Если ключ есть, то можно выводить сообщение и не только

Setup
AppId=TheBestAppIdEver


procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
if CheckBoxA.Checked = true then
begin
WizardForm.DirEdit.Text:=ExpandConstant('{pf}\Setup_A');
end;

if CheckBoxB.Checked = true then
begin
WizardForm.DirEdit.Text:=ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta ll\{#SetupSetting("AppID")}_is1,InstallLocation|{pf}\Setup_B');
end;
end;
end;


Исправил

Gnom_aka_Lexander
28-04-2012, 11:20
Ivan_009, потому, что тема тигр сама по себе криво отражается на работе с Layered-окнами, чем и является эффект Fuse в слайдшоу - два Layered-окна друг на друге. Используй другой скин, или лучше не используй его вообще.

Temyraz@fb
28-04-2012, 11:28
хочу чтоб при чекбоксе В выводилась сообщение «Папка … уже существует. Вы хотите продолжить установку в эту папку?»
а при чекбоксе А не была такой проверки.

Johny777
28-04-2012, 12:01
Temyraz@fb,
вот самодостаточный пример



[Setup]
AppName=Test Mouse Event
AppVersion=1.5
OutputDir=.

AppId=TheBestAppIdEver
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,InstallLocation|{pf}\Setup_B}



[ Code]

var
CheckBoxA: TNewCheckBox;
CheckBoxB: TNewCheckBox;

function Run_A: Boolean; begin Result:=CheckBoxA.Checked; end;
function Run_B: Boolean; begin Result:=CheckBoxB.Checked; end;

procedure InitializeWizard;
begin
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
{ CheckBoxA }
CheckBoxA := TNewCheckBox.Create(WizardForm);
with CheckBoxA do
begin
Name := 'CheckBoxA';
Parent := WizardForm.WelcomePage;
Left := ScaleX(216);
Top := ScaleY(176);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := 'вариант 1';
end;
{ CheckBoxB }
CheckBoxB := TNewCheckBox.Create(WizardForm);
with CheckBoxB do
begin
Name := 'CheckBoxB';
Parent := WizardForm.WelcomePage;
Left := ScaleX(216);
Top := ScaleY(208);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := 'Вариант 2';
end;
end;


procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
////// если отмечен чекбокс А
if CheckBoxA.Checked = true then
begin
WizardForm.DirEdit.Text:=ExpandConstant('{pf}\Setup_A'); //// то путь установки такой
end;
////// если отмечен чекбокс Б
if CheckBoxB.Checked = true then
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1') then /// если есть ключ
begin
if MsgBox('Папка … уже существует. Вы хотите продолжить установку в эту папку?', mbError, MB_YESNO) = idYes /// выводим сообщение /// если ответ ДА
then
begin
WizardForm.DirEdit.Text:=ExpandConstant('{#SetupSetting("DefaultDirName")}'); /// путь через реестр (в скрипте, здесь, через препроцессор берётся строка из секции Setup сверху)
end
else
begin
WizardForm.DirEdit.Text:=ExpandConstant('{pf}\Setup_B'); //// в противном случа *(ответ "нет") - обычный путь для Б
end;
end;
end;
end;
end;




2 чекбокса на странице приветствия
если отмечен первый, то установка в {pf}\Setup_A
если второй {pf}\Setup_B

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

ответ "да" - путь папке приложения где бы она не находилась (куда установили)
ответ "нет" - стандартный путь {pf}\Setup_B

PS
только писать "Папка ... существует" не разумно, тк пользователь может поменять её название
Решение
либо просто "Папка существует..." либо "Приложение установлено. Установить туда же?"




© OSzone.net 2001-2012