Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


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;


Тестируй всё, а то потом не смешно будет

Последний раз редактировалось Johny777, 20-04-2012 в 13:23.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:52, 20-04-2012 | #1587