Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]
Johny777
20-04-2012, 01:40
Ivan_009,
а самому попробовать не судьба?
систему координат в школе проходил?
иксы и игрики всякие?
координаты чего-то можно записать 2-мя способами
1. SetBounds(ScaleX(300), ScaleY(100), ScaleX(140), ScaleY(22));
.........................слева...........сверху.........ширина..........высота....
2.
Left := ScaleX(0);
Top := ScaleY(24056);
Width := ScaleX(185);
Height := ScaleY(73);
только всегда через ScaleX и ScaleY !
Ivan_009
20-04-2012, 02:13
Johny777 я уже пробовал менять координаты дело в том, что кнопки не видно как прописать в скрипте, чтобы ее было видно на всех страницах кроме первой и последней...
No4noylis
20-04-2012, 09:43
Ivan_009, Эту кнопочку помимо координат нужно перенести с Parent := WizardForm; на Parent := WizardForm.InnerPage;
Gnom_aka_Lexander
20-04-2012, 09:50
Ivan_009, Ванечка, дык понятно, что там не будет кнопки. Ну сам подумай, откуда ей там взяться, если она лежит на WizardForm, поверх которого еще два окна и кнопка в этом месте будет четко под ними находиться. Но не ссы, мы ботаны, такие задачки - как семечки щелкаем.
Модуль BASS_Module.iss открываешь, крутишь в самый низ, находишь этот блок и добавляешь строчки, которых у тебя нет. Возможны синтаксические ошибки, но я верю, что не все так плохо с тобой, справишься.
function BringWindowToTop(Handle: HWND): Boolean;
external 'BringWindowToTop@User32.dll stdcall delayload';
procedure BASS_CreateOnOffButton(Parent: TWinControl; Image: String; Left, Top, Width, Height, ShadowWidth: Integer);
begin
BASS_OnOffBtn:= BtnCreate(Parent.Handle, ScaleX(Left), ScaleY(Top), ScaleX(Width), ScaleY(Height), ExpandConstant(Image), ShadowWidth, True);
BtnSetEvent(BASS_OnOffBtn, 1, WrapBtnCallback(@BASS_OnOffClick, 1));
BringWindowToTop(BASS_OnOffBtn);
end; Справка по использованной функции: Ссылка (http://www.firststeps.ru/mfc/steps/help/r.php?123).
Temyraz@fb
20-04-2012, 09:55
честно не могу понять как это сделать
хочу сделать так
[_Code]
function CheckPortUsing(Port: String; fileStrings: TArrayOfString): Boolean;
var i: Integer;
begin
if not RegKeyExists(HKEY_CURRENT_USER, 'Software\Corssys\Synergy Center') or
RegKeyExists(HKEY_CURRENT_USER, 'Software\IVTBelGU\Synergy Center')
then
begin
if MsgBox('текст' + #10#13 +
'тест', mbError, MB_YESNO) = idYes
then
запустит вариант 1
else
begin
MsgBox(ExpandConstant('goodbay' #13#10 'bay'), mbInformation, mb_Ok);
Result := false;
exit;
//MsgBox('тест' #13#10 'текст Synergy Center', mbInformation, mb_Ok);
end;
end
else
begin
запустит по варианту 2
end;
end;
end;
вариант 1
[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={cm:UpdateApplicationName}
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 Center Update {#MyAppVer}.{#MyAppPatch}
Compression=lzma
SolidCompression=yes
WizardImageFile=wizard\WizModernImage-IS.bmp
WizardSmallImageFile=wizard\WizModernSmallImage-IS.bmp
[Registry]
Root: HKLM; Subkey: Software\Corssys\Synergy Center; ValueType: string; ValueName: Version; ValueData: {#MyAppVer}.{#MyAppPatch}; Flags: uninsdeletekey
[Languages]
Name: ru; MessagesFile: i18n\Russian.isl,i18n\sc_russian.isl
Name: ua; MessagesFile: i18n\Ukrainian-6-5.1.11.isl,i18n\sc_ukrainian.isl
[Dirs]
Name: {app}\db_update; Flags: uninsneveruninstall; Languages:
Name: {app}\backups; Flags: uninsneveruninstall; Languages:
[InstallDelete]
Name: {app}\apache-tomcat\bin\service.bat; Type: filesandordirs; BeforeInstall: StopTomcat
Name: {app}\apache-tomcat\work\*; Type: filesandordirs; BeforeInstall: StopTomcat
Name: {app}\apache-tomcat\webapps\ROOT\WEB-INF\classes\su\*; Type: filesandordirs; BeforeInstall: StopTomcat
Name: {app}\apache-tomcat\webapps\ROOT\WEB-INF\classes\i18n\*; Type: filesandordirs; BeforeInstall: StopTomcat
Name: {app}\apache-tomcat\webapps\ROOT\WEB-INF\lib\*; Type: filesandordirs; BeforeInstall: StopTomcat
[Files]
Source: {app}\apache-tomcat\webapps\ROOT\*; DestDir: {app}\backups\Webcontent-before-{#MyAppVer}.{#MyAppPatch}-{code:GetTodaysName}; Flags: ignoreversion recursesubdirs createallsubdirs external uninsneveruninstall; Components: backup_app
Source: {#MyWebContentPath}\*; DestDir: {app}\apache-tomcat\webapps\ROOT; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: StopTomcat
Source: download\*; DestDir: {app}\apache-tomcat\webapps\ROOT\public\download\; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: AddDefaultToConfig
Source: apache-tomcat\bin\service.bat; DestDir: {app}\apache-tomcat\bin\; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: AddDefaultToConfig
Source: configs\WEB-INF\settings.properties; 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; 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; Flags: ignoreversion recursesubdirs createallsubdirs
Source: dontcopy\check.bat; Flags: dontcopy
[Run]
;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\; Flags: runhidden
Filename: {app}\apache-tomcat\bin\service.bat; Parameters: " install"; WorkingDir: {app}\apache-tomcat\bin\; Flags: runhidden
Filename: {app}\db_update\make_db_backup.bat; WorkingDir: {app}\; Flags: shellexec waituntilterminated; StatusMsg: StatusMsg: {cm:BackupingCurrentDB}; 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; 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; StatusMsg: {cm:StartingTomcat}
[Components]
Name: backup_db; Description: {cm:MakeDBBackupComponent}; Flags: checkablealone; Types: custom full; Languages: ; ExtraDiskSpaceRequired: 5000000
Name: backup_app; Description: {cm:MakeApplicationBackupComponent}; Flags: checkablealone; Types: custom full; ExtraDiskSpaceRequired: 50000000
[ Code]
var
PasswordPage: TInputQueryWizardPage;
DataDirPage: TInputDirWizardPage;
UserVarPass: String;
PathToPsql: String;
procedure InitializeWizard();
begin
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);
end;
function NextButtonClick(CurPageID: Integer): Boolean;
var filecontent: String;
ReturnCode: Integer;
begin
Result := True;
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;
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;
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;
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 InitializeSetup: Boolean;
var ResultCode: Integer;
var fileStrings: TArrayOfString;
var pathToOutput: String;
var outputFile: String;
Begin
If (ExpandConstant('{reg:HKLM\Software\JavaSoft\Java Runtime Environment,CurrentVersion}') = '1.6') then
Result:= True
else MsgBox(ExpandConstant('{cm:SetupJRE}'), mbInformation, mb_Ok);
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=wpInfoAfter)or(CurPageID=wpFinished ) then
begin
if (not CheckDBUpdateIsOk) then begin
MsgBox(ExpandConstant('{cm:ErrorUpdatingDB}')+' ('+ExpandConstant('{app}')+'\backups)', mbCriticalError, mb_Ok);
Abort;
end
end
end;
procedure ReplacePathInConfigs();
var filecontent: String;
var pathToConfig: String;
var langForConfig: String;
begin
LoadStringFromFile(ExpandConstant(CurrentFileName), filecontent);
langForConfig:=ExpandConstant('{language}');
pathToConfig:=ExpandConstant('{app}');
StringChange(pathToConfig,'\','/');
StringChange(filecontent,'{INSTALL_PATH}',pathToConfig);
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 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);
// загружаем как строки конфиг sc
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;
вариант 2
[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}
VersionInfoVersion={#MyAppVer}.{#MyAppPatch}.{#MyAppBuild}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=D:\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir={#MyOutputDir}
OutputBaseFilename=SynergyCenter{#MyAppVer}Setup
Compression=lzma
SolidCompression=yes
LicenseFile=dontcopy\license_ru.rtf
WizardImageFile=wizard\WizModernImage-IS.bmp
WizardSmallImageFile=wizard\WizModernSmallImage-IS.bmp
[Languages]
;Name: en; MessagesFile: i18n\Default.isl,i18n\sc_english.isl; LicenseFile: dontcopy\license_en.rtf
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\Corssys\Synergy Center; ValueType: string; ValueName: Version; ValueData: {#MyAppVer}.{#MyAppPatch}; Flags: uninsdeletekey
[Dirs]
Name: {app}\apache-tomcat; Flags: uninsneveruninstall; Languages:
Name: {app}\files; Flags: uninsneveruninstall; Languages:
Name: {app}\nginx; Flags: uninsneveruninstall; Languages:
Name: {app}\dbinit; Flags: uninsneveruninstall; Languages:
Name: {app}\backups; Flags: uninsneveruninstall; Languages:
[Files]
Source: apache-tomcat\*; DestDir: {app}\apache-tomcat; Flags: ignoreversion recursesubdirs createallsubdirs
Source: apache-tomcat\msvcr71.dll; DestDir: {sys}\; Flags: onlyifdoesntexist
Source: {#MyWebContentPath}\*; DestDir: {app}\apache-tomcat\webapps\ROOT; Flags: ignoreversion recursesubdirs createallsubdirs
Source: download\*; DestDir: {app}\apache-tomcat\webapps\ROOT\public\download\; Flags: ignoreversion recursesubdirs createallsubdirs
Source: configs\WEB-INF\settings.properties; DestDir: {app}\apache-tomcat\webapps\ROOT\WEB-INF\; Flags: ignoreversion; AfterInstall: ReplacePathInConfigs
Source: configs\WEB-INF\classes\log4j.xml; DestDir: {app}\apache-tomcat\webapps\ROOT\WEB-INF\classes\; Flags: ignoreversion; AfterInstall: ReplacePathInConfigs
Source: configs\nginx_to_autorun.reg; DestDir: {app}\nginx\; Flags: ignoreversion; AfterInstall: ReplacePathInConfigsReg
Source: nginx\add_reg.bat; DestDir: {app}\nginx\; Flags: ignoreversion; AfterInstall: ReplacePathInConfigsReg
Source: nginx\*; DestDir: {app}\nginx; Flags: ignoreversion recursesubdirs createallsubdirs
Source: dbinit\*; DestDir: {app}\dbinit; Flags: ignoreversion recursesubdirs; AfterInstall: ReplacePathInConfigsPass
Source: UserMenu\*; DestDir: {app}; Flags: ignoreversion recursesubdirs; Languages: ; AfterInstall: ReplacePathInConfigs
Source: {#MySetupDbPath}\db\*.sql; DestDir: {app}\dbinit; Flags: ignoreversion
Source: dontcopy\netstat1.bat; Flags: dontcopy
Source: dontcopy\check.bat; Flags: dontcopy
[Icons]
Name: {group}\{#MyAppName}; 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; Languages: ru
Name: {group}\{cm:UserManual}; Filename: {app}\apache-tomcat\webapps\ROOT\public\download\User_Manual\Manual_PDF\user_manual.pdf; Languages: ru
Name: {group}\{cm:AdminManual}; Filename: {app}\apache-tomcat\webapps\ROOT\public\download\User_Manual\ua\manual_admin.pdf; Languages: ua
Name: {group}\{cm:UserManual}; Filename: {app}\apache-tomcat\webapps\ROOT\public\download\User_Manual\ua\manual_user.pdf; Languages: ua
Name: {group}\{cm:Rukovodstvo_administratora}; Filename: {app}\apache-tomcat\webapps\ROOT\public\download\User_Manual\Manual_PDF\Rukovodstvo_administratora.pdf
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
[Run]
Filename: {app}\apache-tomcat\bin\service.bat; Parameters: " install"; WorkingDir: {app}\apache-tomcat\bin\; Flags: runhidden; StatusMsg: Installing Apache Tomcat as Service
Filename: NET; Parameters: "START ""Apache Tomcat"""; Flags: runhidden; Components: PostgreSQL; StatusMsg: {cm:StartingTomcat}
Filename: {app}\dbinit\createAndInitDb.bat; Parameters: """{code:GetPsqlPath}"" {language}"; WorkingDir: {app}\dbinit\; Flags: shellexec runhidden waituntilterminated; Components: PostgreSQL; StatusMsg: {cm:CreatingDatabase}
Filename: {app}\nginx\add_reg.bat; Flags: shellexec runhidden
Filename: {app}\start_nginx.bat; Flags: shellexec runhidden
Filename: {app}\dbinit\installAdditionalCards.bat; Parameters: """{code:GetPsqlPath}"" {language}"; WorkingDir: {app}\dbinit\; 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; Components: PostgreSQL
[UninstallRun]
Filename: NET; Parameters: "STOP ""Apache Tomcat"""; Flags: runhidden
Filename: {app}\apache-tomcat\bin\service.bat; Parameters: " remove"; WorkingDir: {app}\apache-tomcat\bin\; Flags: runhidden; Components:
Filename: {app}\stop_nginx.bat; WorkingDir: {app}\; Components:
[Components]
Name: Tomcat; Description: {cm:ApacheTomcatComponent}; Flags: fixed; Types: custom compact full
Name: PostgreSQL; Description: {cm:PostgresComponent}; Types: custom full; Flags: checkablealone; ExtraDiskSpaceRequired: 16080384; Languages:
[Tasks]
Name: IntstallDefaultShemes; Description: {cm:IntstallDefaultShemes}; Flags: checkablealone; Components: Postgresql; Languages:
[UninstallDelete]
Name: {app}\dbinit; Type: dirifempty
[ Code]
var
PasswordPage: TInputQueryWizardPage;
DataDirPage: TInputDirWizardPage;
UserVarPass: String;
PathToPsql: String;
// STAGE 2
procedure InitializeWizard();
begin
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);
end;
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;
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;
function GetBuildNumber(param: String): String;
var
BuildVersion: String;
begin
LoadStringFromFile(ExpandConstant('buildNumber.txt'), BuildVersion);
Result := BuildVersion;
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;
// >>> STAGE 1 <<<
Function InitializeSetup: Boolean;
var ResultCode: Integer;
var fileStrings: TArrayOfString;
var pathToOutput: String;
var outputFile: String;
Begin
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 MsgBox('Error ', mbInformation, mb_Ok);
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 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;
procedure ReplacePathInConfigsPass();
var filecontent: String;
begin
LoadStringFromFile(ExpandConstant(CurrentFileName), filecontent);
StringChange(filecontent,'{PG_PASS}',UserVarPass);
SaveStringToFile(ExpandConstant(CurrentFileName), filecontent, false);
end;
как мне склеит это все?
Ivan_009
20-04-2012, 11:07
Лександер спасибо большое... :up
Johny777
20-04-2012, 12:52
Temyraz@fb,
вот попробовал
тестируй, тк скорее всего сильно накосячил особенно в Function InitializeSetup
[Setup]
AppName=DisksInfo
VersionInfoVersion=5.0
AppVerName=DisksInfo
DefaultDirName={pf}\My program
EnableDirDoesntExistWarning=true
[ Code]
var
CheckBoxA: TNewCheckBox;
CheckBoxB: TNewCheckBox;
/// это общее /// начало
PasswordPage: TInputQueryWizardPage;
DataDirPage: TInputDirWizardPage;
UserVarPass: String;
PathToPsql: String;
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;
/// конец
/// кусок из варианта 2 /// начало
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;
/// конец
/// это кусок варианта 1 /// начало
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 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);
// загружаем как строки конфиг sc
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;
procedure CurPageChanged(CurPageID: Integer);
var ResultCode: Integer;
Begin
If (CurPageID=wpInfoAfter)or(CurPageID=wpFinished ) then
begin
if (not CheckDBUpdateIsOk) then begin
MsgBox(ExpandConstant('{cm:ErrorUpdatingDB}')+' ('+ExpandConstant('{app}')+'\backups)', mbCriticalError, mb_Ok);
Abort;
end
end
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;
Begin
/// это общее? /// начало
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 MsgBox('Error ', mbInformation, mb_Ok);
End;
procedure InitializeWizard;
begin
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
/// это общее /// начало
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 not RegKeyExists(HKEY_CURRENT_USER, 'Software\Corssys\Synergy Center') or
RegKeyExists(HKEY_CURRENT_USER, 'Software\IVTBelGU\Synergy Center')
then
begin
///запустит вариант 1
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;
end;
function NextButtonClick(CurPageID: Integer): Boolean;
var filecontent: String;
ReturnCode: Integer;
begin
if CheckBoxA.Checked = true then
begin
begin
Result := True;
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;
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;
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 = false then
begin
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;
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;
Тестируй всё, а то потом не смешно будет
Temyraz@fb
20-04-2012, 13:25
проверил. при втором варианте не проходить дальше окна чекбокса.
и еще нельзя ли скрыть от глаз пользователю страницу чекбокса?
Johny777
20-04-2012, 13:32
Temyraz@fb,
да скрыть то можно, только там чекбоксы
попробуй допиши просто в конце InitializeWizard; перед последним end;
CheckBoxA.visible:=false;
CheckBoxB.visible:=false;
втором варианте не проходить дальше окна чекбокса. »
значит криво работает NextButtonClick
потому что я накочячил как обычно
во первых во второй половине if CheckBoxB.Checked = false then
нужно сменить на true
вот это повторяется
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;
а значит его можно вынести до проверки какой чекбокс отмечен
вот замени всю function NextButtonClick и попробуй
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
begin
Result := True;
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;
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
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;
Temyraz@fb
20-04-2012, 13:34
посмотри пожалуйста я еще добавил кое в исходных файлах.
Temyraz@fb
20-04-2012, 13:50
теперь нормально со вторым вариантом.
только добавив как ты сказал
попробуй допиши просто в конце InitializeWizard; перед последним end;
CheckBoxA.visible:=false;
CheckBoxB.visible:=false;
исчезли чек боксы. а страница пустая. может туда можно добавить лицензионное соглашение?
[Languages]
;Name: en; MessagesFile: i18n\Default.isl,i18n\sc_english.isl; LicenseFile: dontcopy\license_en.rtf
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
Johny777
20-04-2012, 14:08
Temyraz@fb,
склеить компоненты в одном инсталле можно 2-мя способами
1. это в зависимости от записи реестра (посмотри пример который я давал Devils Night, пару страниц назад )
2. делать две страницы с листбоксами и пропускать одну из них. Только я почти не умею пользоваться листбоксами
3. блокировать элементы компонентслиста в зависимости от выбора одного из основных чекбоксов на странице приветсятвия (не советую)
исчезли чек боксы »
главное чтобы даже невидимыми они работали, что они и должны делать :)
может туда можно добавить лицензионное соглашение? »
как хочешь
заменил радиокнопки на один чекбокс
этим примером немного переделанным
[Setup]
AppName=My License
AppVerName=My License v 1.3
CreateAppDir=False
OutputDir=.
licenseFile=compiler:license.txt
[Languages]
Name: rus; MessagesFile: "compiler:Languages\Russian.isl";
[ Code]
var
CheckLicense: TCheckBox;
procedure LicenseOnClick(Sender: TObject);
begin
if (CheckLicense.Checked) = True then
begin
WizardForm.LicenseAcceptedRadio.Checked := True;
end else
begin
WizardForm.LicenseNotAcceptedRadio.Checked := True;
end;
end;
procedure InitializeWizard();
begin
WizardForm.LicenseNotAcceptedRadio.Hide;
WizardForm.LicenseAcceptedRadio.Hide;
WizardForm.LicenseMemo.Height := ScaleY(175);
CheckLicense := TCheckBox.Create(WizardForm);
CheckLicense.Left := ScaleX(0);
CheckLicense.Top := ScaleY(216);
CheckLicense.Caption := WizardForm.LicenseAcceptedRadio.Caption;
CheckLicense.Width := ScaleX(417);
CheckLicense.OnClick := @LicenseOnClick;
CheckLicense.Parent := WizardForm.LicensePage;
end;
результат
[Setup]
AppName=DisksInfo
VersionInfoVersion=5.0
AppVerName=DisksInfo
DefaultDirName={pf}\My program
EnableDirDoesntExistWarning=true
[ Code]
var
CheckBoxA: TNewCheckBox;
CheckBoxB: TNewCheckBox;
/// это общее /// начало
PasswordPage: TInputQueryWizardPage;
DataDirPage: TInputDirWizardPage;
UserVarPass: String;
PathToPsql: String;
CheckLicense: TNewCheckBox;
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
if (CheckLicense.Checked) = True then
begin
WizardForm.LicenseAcceptedRadio.Checked := True;
end else
begin
WizardForm.LicenseNotAcceptedRadio.Checked := True;
end;
end;
/// конец
/// пропускаем страницы /// начало
function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageID of
wpLicense: Result := True;
end;
end;
/// конец
/// кусок из варианта 2 /// начало
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;
/// конец
/// это кусок варианта 1 /// начало
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 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);
// загружаем как строки конфиг sc
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;
procedure CurPageChanged(CurPageID: Integer);
var ResultCode: Integer;
Begin
If (CurPageID=wpInfoAfter)or(CurPageID=wpFinished ) then
begin
if (not CheckDBUpdateIsOk) then begin
MsgBox(ExpandConstant('{cm:ErrorUpdatingDB}')+' ('+ExpandConstant('{app}')+'\backups)', mbCriticalError, mb_Ok);
Abort;
end
end
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;
Begin
/// это общее? /// начало
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 MsgBox('Error ', mbInformation, mb_Ok);
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(97);
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;
/// это общее /// начало
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 not RegKeyExists(HKEY_CURRENT_USER, 'Software\Corssys\Synergy Center') or
RegKeyExists(HKEY_CURRENT_USER, 'Software\IVTBelGU\Synergy Center')
then
begin
///запустит вариант 1
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
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
begin
Result := True;
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;
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
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;
wolkow70
20-04-2012, 14:16
Расшифруйте пожалуйста точное значение флагов в таком случае:
Flags: uninsneveruninstall regserver onlyifdoesntexist
Johny777
20-04-2012, 14:26
wolkow70,
из справки http://sendfile.su/570136
uninsneveruninstall
Никогда не удалять данный файл. Его можно использовать при установке файла, предназначенного для общего использования, как, например, MFC DLL, потому что в этом случае деинсталлятор не должен его удалять до тех пор, пока его используют другие приложения.
regserver
Регистрация OLE-сервера (он же ActiveX control). Если этот флаг установлен, инсталлятор найдет и выполнит DllRegisterServer для DLL/OCX. Деинсталлятор вызовет DllUnregisterServer. При использовании в комбинации с флагом sharedfile DLL/OCX будет только дерегистрирована, когда связывающий счетчик достигнет нуля.
On a 64-bit mode install, the file is assumed to be a 64-bit image and will be registered inside a 64-bit process. You can override this by specifying the 32bit flag.
Дополнительные сведения приведены в конце страницы.
onlyifdoesntexist
Устанавливает файл только в случае, если такого файла в системе пользователя нет.
Flags: "не удалять при деинсталяции" "хз" "если существует, то не устанавливать=пропускать"
Temyraz@fb
20-04-2012, 14:30
а как сделать чтоб пока check не стоит кнопка далее была не доступна?
{ 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;
Johny777
20-04-2012, 14:38
а как сделать чтоб пока check не стоит кнопка далее была не доступна? »
добавь у себя
procedure LicenseOnClick(Sender: TObject);
begin
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;
а так как с лицензией соглашаемся на странице приветствия (первой)
то допиши в конце InitializeWizard рядом с невидимыми) чекбоксами
WizardForm.NextButton.Enabled := False;
CheckLicense.Checked := false;
Temyraz@fb
20-04-2012, 14:43
сделал как ты сказал, ничего не изменилось.
ошибся, изменилось. только когда запускаешь его, чек не стоит, кнопка доступна, когда чек ставишь, кнопка доступна, снимаешь чек кнопка не доступна. как то так
выход нашел сделать по умолчанию галочку на принятии соглашении
Johny777
20-04-2012, 15:20
Temyraz@fb,
Ты извини. У меня скрипт есть, но запустить не могу, тк нет временных файлов и констат
вот отдельный рабочий пример
раскидай по секциям и замени существующие куски
[Setup]
AppName=DisksInfo
VersionInfoVersion=5.0
AppVerName=DisksInfo
DefaultDirName={pf}\My program
EnableDirDoesntExistWarning=true
licenseFile=compiler:license.txt
[ Code]
var
CheckLicense: TNewCheckBox;
/// лицензия // начало
procedure LicenseOnClick(Sender: TObject);
begin
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;
/// конец
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);
Checked := True;
OnClick := @LicenseOnClick;
CheckLicense.Caption := ExpandConstant(SetupMessage(msgLicenseAccepted));
end;
with WizardForm.LicenseMemo do
begin
Left := ScaleX(164);
Top := ScaleY(0);
Width := ScaleX(333);
Height := ScaleY(284);
Parent := WizardForm.WelcomePage;
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpWelcome then
begin
WizardForm.NextButton.Enabled := False;
CheckLicense.Checked := false;
end;
end;
только при возврате на страницу приветствия опять галка будет снята, а кнопка заблокирована :(
Temyraz@fb
20-04-2012, 15:32
Johny777 спасибо тебе большое
я правильно понял логику:
[Files]
Source: {src}\files\*; DestDir: {code:SrcDir}\files\; Flags: ignoreversion recursesubdirs createallsubdirs external; Check: значение
Source: {src}\license\*; DestDir: {code:SrcDir}\license\; Flags: ignoreversion recursesubdirs createallsubdirs external; Check: значение
вот какие значения надо подставлять при первом варианте и при втором?
Johny777
20-04-2012, 15:38
Temyraz@fb,
ты о чём?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.