2014-01-17 6 views
2

это мой код для ввода номера порта из user.upon install. Я хочу, чтобы номер порта был изменен в файле apache tomcat server.xml.как передать значение переменной в xml-файл?

И прохождение Apache Tomcat архива также используя файлы раздел и распаковать его в разделе выполнения

var 
javaVersion: String; 
javaPath: String; 

// номер порта Коды

function SetFocus(hWnd: HWND): HWND; 
external '[email protected] stdcall'; 

var 
SerialPage: TWizardPage; 
    SerialEdits: array of TEdit; 

const 
CF_TEXT = 1; 
VK_BACK = 8; 
SC_EDITCOUNT = 1; 
SC_CHARCOUNT = 4; 


    procedure OnSerialEditChange(Sender: TObject); 
var 
I: Integer; 
CanContinue: Boolean; 
begin 
CanContinue := True; 
for I := 0 to GetArrayLength(SerialEdits) - 1 do 
if Length(SerialEdits[I].Text) < SC_CHARCOUNT then 
begin 
    CanContinue := False; 
    Break; 
end; 
WizardForm.NextButton.Enabled := CanContinue; 
end; 

function GetSerialNumber(Param: String): string; 
    var 
    I: Integer; 
    begin 
    Result := ''; 
    for I := 0 to GetArrayLength(SerialEdits) - 1 do 
    Result := Result + SerialEdits[I].Text ; 
    end; 


procedure OnSerialEditKeyDown(Sender: TObject; var Key: Word; 
Shift: TShiftState); 
var 
    Edit: TEdit; 
    EditIndex: Integer; 
    begin 
    Edit := TEdit(Sender); 
    EditIndex := Edit.TabOrder - SerialEdits[0].TabOrder; 
if (EditIndex = 0) and (Key = Ord('V')) and (Shift = [ssCtrl]) then 
begin 
if TryPasteSerialNumber then 
    Key := 0; 
end 
else 
    if (Key >= 32) and (Key <= 255) then 
    begin 
    if Length(Edit.Text) = SC_CHARCOUNT - 1 then 
    begin 
    if EditIndex < GetArrayLength(SerialEdits) - 1 then 
    SetFocus(SerialEdits[EditIndex + 1].Handle) 
    else 
    SetFocus(WizardForm.NextButton.Handle); 
    end; 
    end 
    else 
    if Key = VK_BACK then 
    if (EditIndex > 0) and (Edit.Text = '') and (Edit.SelStart = 0) then 
    SetFocus(SerialEdits[EditIndex - 1].Handle); 
    end; 



procedure CreateSerialNumberPage; 
     var 
     I: Integer; 
     Edit: TEdit; 
     DescLabel: TLabel; 
     EditWidth: Integer; 
     begin 
      SerialPage := CreateCustomPage(wpWelcome, 'Serial number validation', 
'Enter the valid serial number'); 

DescLabel := TLabel.Create(SerialPage); 
DescLabel.Top := 16; 
DescLabel.Left := 0; 
DescLabel.Parent := SerialPage.Surface; 
DescLabel.Caption := 'Enter the valid serial number and continue with the installation...'; 
DescLabel.Font.Style := [fsBold]; 

SetArrayLength(SerialEdits, SC_EDITCOUNT); 
EditWidth := (SerialPage.SurfaceWidth - ((SC_EDITCOUNT - 1) * 8)) div SC_EDITCOUNT; 

for I := 0 to SC_EDITCOUNT - 1 do 
    begin 
Edit := TEdit.Create(SerialPage); 
Edit.Top := 40; 
Edit.Left := I * (EditWidth + 8); 
Edit.Width := EditWidth; 
Edit.CharCase := ecUpperCase; 
Edit.MaxLength := SC_CHARCOUNT; 
Edit.Parent := SerialPage.Surface; 
Edit.OnChange := @OnSerialEditChange; 
Edit.OnKeyDown := @OnSerialEditKeyDown; 
SerialEdits[I] := Edit; 
end; 
end; 


procedure CurPageChanged(CurPageID: Integer); 
begin 
if CurPageID = SerialPage.ID then 
WizardForm.NextButton.Enabled := False; 
end; 

procedure InitializeWizard; 
begin 
CreateSerialNumberPage; 
end ; 

я хочу, чтобы заменить номер порта, который был введен пользователь в tomcats server.xml с использованием токенов

<Connector port="##portnumber##" protocol="HTTP/1.1" 
connectionTimeout="20000"   
redirectPort="8443" /> 
+0

Какую кодировку использует ваш XML-файл? Насколько сложным является этот XML-файл? Откуда вы хотите получить значение для значения атрибута 'port'? Ваш код сценария Pascal выглядит совершенно неактуальным здесь ... – TLama

+0

пользователь вводит номер порта, и этот номер порта должен быть удален в файле tomcat server.xml – user2689808

+0

. Мое требование - это указать номер порта во время установки, а номер порта enterd следует заменить в server.xml file (apache tomcat) – user2689808

ответ

0

Вот сценарий, который я сделал для тебя. Я изменил способ ввода номера порта и показал, как изменять значения атрибутов в файлах XML. Также обратите внимание на использование функции AfterInstall:

#define TomcatDest "{app}\tomcat" 
#define TomcatFullPath TomcatDest + "\apache-tomcat-7.0.42" 
#define TomcatSrvConfigFile TomcatFullPath + "\conf\server.xml" 

[Setup] 
AppName=My Program 
AppVersion=1.5 
DefaultDirName={pf}\My Program 

[Files] 
Source: "unzip.exe"; DestDir: "{tmp}\installertemps" 
Source: "apache-tomcat-7.0.42.zip"; DestDir: "{tmp}\installertemps" 

[Run] 
Filename: "{tmp}\installertemps\unzip.exe"; Parameters: " ""{tmp}\installertemps\apache-tomcat-7.0.42.zip"" -d ""{#TomcatDest}"" "; AfterInstall: UpdateConfigFile(ExpandConstant('{#TomcatSrvConfigFile}')) 

[Code] 
const 
    DefaultPort = 8080; 
var 
    ConfigPage: TInputQueryWizardPage; 

procedure SaveAttrValueToXML(const FileName, NodePath, Attribute, 
    Value: string); 
var 
    XMLNode: Variant; 
    XMLDocument: Variant; 
begin 
    XMLDocument := CreateOleObject('Msxml2.DOMDocument'); 
    try 
    XMLDocument.async := False; 
    XMLDocument.load(FileName); 
    if (XMLDocument.parseError.errorCode <> 0) then 
     MsgBox('The XML file could not be parsed. ' + 
     XMLDocument.parseError.reason, mbError, MB_OK) 
    else 
    begin 
     XMLDocument.setProperty('SelectionLanguage', 'XPath'); 
     XMLNode := XMLDocument.selectSingleNode(NodePath); 
     XMLNode.setAttribute(Attribute, Value); 
     XMLDocument.save(FileName); 
    end; 
    except 
    MsgBox('An error occured!' + #13#10 + GetExceptionMessage, 
     mbError, MB_OK); 
    end; 
end; 

procedure InitializeWizard; 
begin 
    ConfigPage := CreateInputQueryPage(wpSelectDir, 'Tomcat configuration', 
    'Description', 'SubCaption'); 
    ConfigPage.Add('Port:', False); 
    ConfigPage.Values[0] := IntToStr(DefaultPort); 
end; 

function NextButtonClick(CurPageID: Integer): Boolean; 
var 
    PortNumber: Integer; 
begin 
    Result := True; 
    if CurPageID = ConfigPage.ID then 
    begin 
    PortNumber := StrToIntDef(ConfigPage.Values[0], -1); 
    // modify the statement to allow users enter only valid port numbers; 
    // currently the value of -1 means that there is not even a number entered 
    // in the edit box 
    if (PortNumber = -1) then 
    begin 
     Result := False; 
     MsgBox('You''ve entered invalid port number. The setup cannot continue...', mbError, MB_OK); 
    end; 
    end; 
end; 

procedure UpdateConfigFile(const FileName: string); 
begin 
    SaveAttrValueToXML(FileName, '//Server/Service/Connector', 'port', 
    ConfigPage.Values[0]); 
end; 
+0

Этот скрипт не заботится о том, чтобы очистить то, что он извлекает из архива. Не заботится о том, что Tomcat еще не установлен и т. Д. – TLama

+0

Огромное вам спасибо за то, что потратили ваше драгоценное время на это. Если вы хотите предложить какие-либо сайты для изучения интуитивно-понятного кодирования. – user2689808

+0

Добро пожаловать! Об обучении сайтов ... По-моему, их мало. Один ['nice site'] (http://www.mirality.co.nz/inno/tips.php) был написан [' Miral'] (http://stackoverflow.com/users/43534/miral). – TLama

Смежные вопросы