2016-06-16 5 views
1

현재 Inno Setup에서 Wi-Fi 용 고정 IP를 설정하는 설치 프로그램 유틸리티를 만들려고합니다. 다음 사용자 정의 페이지 버튼을 누르면 올바른 명령을 삽입하는 방법을 찾는 데 어려움이 있습니다. NextButtonClick 메서드는 제대로 호출되지만 실제로 내 페이지의 다음 단추를 누르면 쿼리를 실행하지 않고 종료됩니다.NextButtonClicked 메서드에서 프로 시저에 값 전달 Inno Setup

procedure InitializeWizard(); 
var 
    Page: TInputQueryWizardPage; 
    ipAddress, subnetMask, defaultGateway, prefferredDNSServer: String; 
    ResultCode: Integer; 
begin 
    Page := CreateInputQueryPage(wpWelcome, 
    'Set Network Config', 'A window for setting the wifi configuration', 
    'Please indicate the IP address and press next when finished.'); 

    { Add items (False means it's not a password edit) } 
    Page.Add('IP Address:', False); 
    Page.Add('Subnet mask:', False); 
    Page.Add('Default gateway:', False); 
    Page.Add('Preferred DNS server:', False); 

    { Set initial values (optional) } 
    Page.Values[0] := ExpandConstant('0.0.0.0'); 

    ipAddress := Page.Values[0] 

    Page.Values[1] := ExpandConstant('0.0.0.0'); 

    subnetMask := Page.Values[1] 

    Page.Values[2] := ExpandConstant('0.0.0.0'); 

    defaultGateway := Page.Values[2] 

    Page.Values[3] := ExpandConstant('0.0.0.0'); 

    prefferredDNSServer := Page.Values[3] 

    if NextButtonClick(Page.ID) then 
    begin 
    Exec('cmd.exe', 
     '/k ' + 'netsh interface ip set address "Wi-Fi" static ' + ipAddress + ' ' + 
      subnetMask + ' ' + defaultGateway + ' ' + prefferredDNSServer, 
     '', SW_SHOW, ewWaitUntilTerminated, ResultCode) 
    end; 
end; 

function NextButtonClick(CurPageID: Integer): Boolean; 
var 
    ipAddress, subnetMask, defaultGateway, prefferredDNSServer: String; 
    ResultCode: Integer; 
begin 
    Result := True 

    Log('NextButtonClick(' + IntToStr(CurPageID) + ') called'); 
    case CurPageID of 
    100: 
     { ipAddress := getParams(ipAddress); } 
     { setWifi(ipAddress, subnetMask, defaultGateway, prefferredDNSServer); } 
     Result:= True; 
    end; 
end; 

답변

0

직접 NextButtonClick function으로 전화하지 마십시오. event function이므로 Inno Setup에서 호출했습니다.

코드가 있어야합니다 같은 :

var 
    NetPage: TInputQueryWizardPage; 

procedure InitializeWizard(); 
begin 
    NetPage := 
    CreateInputQueryPage(wpWelcome, 
     'Set Network Config', 'A window for setting the wifi configuration', 
     'Please indicate the IP address and press next when finished.'); 

    { Add items (False means it's not a password edit) } 
    NetPage.Add('IP Address:', False); 
    NetPage.Add('Subnet mask:', False); 
    NetPage.Add('Default gateway:', False); 
    NetPage.Add('Preferred DNS server:', False); 

    { Set initial values (optional) } 
    NetPage.Values[0] := ExpandConstant('0.0.0.0'); 
    NetPage.Values[1] := ExpandConstant('0.0.0.0'); 
    NetPage.Values[2] := ExpandConstant('0.0.0.0'); 
    NetPage.Values[3] := ExpandConstant('0.0.0.0'); 
end; 

function NextButtonClick(CurPageID: Integer): Boolean; 
var 
    ipAddress, subnetMask, defaultGateway, prefferredDNSServer: String; 
    ResultCode: Integer; 
    Command: string; 
begin 
    Result := True; 

    if CurPageID = NetPage.ID then 
    begin 
    ipAddress := NetPage.Values[0]; 
    subnetMask := NetPage.Values[1]; 
    defaultGateway := NetPage.Values[2]; 
    prefferredDNSServer := NetPage.Values[3]; 

    Command := 
     'netsh interface ip set address "Wi-Fi" static ' + 
     ipAddress + ' ' + subnetMask + ' ' + defaultGateway + ' ' + prefferredDNSServer; 
    Exec('cmd.exe', '/C ' + Command, '', SW_SHOW, ewWaitUntilTerminated, ResultCode) 
    end; 
end; 

비록 일반적으로, 당신은 목표 시스템을 변경, 사용자가 을 클릭하여 설치를 확인 후에 만에를 "설치"해야 "Ready to Install" 페이지

당신이 그것에 대해 CurPageID = wpReady을 사용할 수 있지만

, 더 관용적 접근 방식은 CurStepChanged(ssInstall) (또는 ssPostInstall)를 사용하고 있습니다 :

procedure CurStepChanged(CurStep: TSetupStep); 
var 
    ipAddress, subnetMask, defaultGateway, prefferredDNSServer: String; 
    ResultCode: Integer; 
    Command: string; 
begin 
    if CurStep = ssInstall then 
    begin 
    ipAddress := NetPage.Values[0]; 
    subnetMask := NetPage.Values[1]; 
    defaultGateway := NetPage.Values[2]; 
    prefferredDNSServer := NetPage.Values[3]; 

    Command := 
     'netsh interface ip set address "Wi-Fi" static ' + 
     ipAddress + ' ' + subnetMask + ' ' + defaultGateway + ' ' + prefferredDNSServer; 
    Exec('cmd.exe', '/C ' + Command, '', SW_SHOW, ewWaitUntilTerminated, ResultCode) 
    end; 
end; 
+0

감사합니다,하지만 난 당신의 코드를 사용할 때, 나는에서 PROC 오류를 호출 할 수있는 점점 계속 만약 CurPageID = NetPage.ID라면 첫 번째 블록에서 ipAddress : = NetPage.Values ​​[0]; 이게 질서와 관련이 있니? –

+0

이 메서드를 호출 할 때 NetPage가 null과 같다고 문제가 있다고 생각합니다. –

+0

'NextButtonClick'은'InitializeWizard' 전에 ​​호출 될 수 없으므로'NetPage'는'NextButtonClick'에서'nil'이 될 수 없습니다. 'NextButtonClick'에 대한 명시 적 호출을 제거하는 것을 잊지 않았는지 확인하십시오. –