Ветеран
Сообщения: 649
Благодарности: 444
|
Профиль
|
Отправить PM
| Цитировать
Temyraz@fb,
вот попробовал
тестируй, тк скорее всего сильно накосячил особенно в Function InitializeSetup
читать дальше »
Код: ![Выделить весь код](images/misc/selectcode.png)
[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;
Тестируй всё, а то потом не смешно будет
|