2017-07-27 29 views
1

我已經配置了下面的腳本來要求用戶輸入IP地址作爲安裝嚮導的一部分,該地址被寫入應用程序將引用的配置文件以知道在哪裏進行通信用。 不過目前,服務是在更新配置文件之前創建的(Run部分發生在CurStep = ssPostInstall之前),所以默認值在文件更新之前已經從文件中讀取。 這意味着當前需要進一步的手動服務重啓才能使應用程序進行通信。在創建服務之前運行post安裝文件替換

據我所知,Run部分可能在ssPostInstall之後發生。

我已閱讀文章Inno Setup: How to run a code procedure in Run section or before Run section?,這表明我可以使用參數BeforeInstall:作爲運行命令的一部分,以首先執行CurStepChanged過程。但是,這會導致錯誤

找到了必需的函數或過程'CurStepChanged',但找不到兼容的原型。

我也試着移動CurStepChanged部分上方的運行行和命令(儘可能匹配提到的文章),但是這仍然返回相同的錯誤。

任何人都可以提供一些指導,以我哪裏出錯配置?

[Code] 

var 
    PrimaryServerPage: TInputQueryWizardPage; 

function FileReplaceString(ReplaceString: string):boolean; 
var 
    MyFile : TStrings; 
    MyText : string; 
begin 
    Log('Replacing in file'); 
    MyFile := TStringList.Create; 

    try 
    Result := true; 

    try 
     MyFile.LoadFromFile(ExpandConstant('{app}' + '\providers\print\win\print-provider.conf')); 
     Log('File loaded'); 
     MyText := MyFile.Text; 

     { Only save if text has been changed. } 
     if StringChangeEx(MyText, 'REPLACE_WITH_CUSTOMER_IP', ReplaceString, True) > 0 then 
     begin; 
     Log('IP address inserted'); 
     MyFile.Text := MyText; 
     MyFile.SaveToFile(ExpandConstant('{app}' + '\providers\print\win\print-provider.conf')); 
     Log('File saved'); 
     end; 
    except 
     Result := false; 
    end; 
    finally 
    MyFile.Free; 
    end; 

    Result := True; 
end; 

procedure InitializeWizard; 
begin 
    PrimaryServerPage := 
    CreateInputQueryPage(
     wpWelcome, 'Application Server Details', 'Where is installed?', 
     'Please specify the IP address or hostname of your ' + 
     'Primary Application Server, then click Next.'); 
    PrimaryServerPage.Add('Primary Application Server IP/Hostname:', False); 
end; 

procedure CurStepChanged(CurStep: TSetupStep); 
begin 
    if CurStep = ssPostInstall then 
    begin 
    Log('File installed, replacing IP address'); 
    FileReplaceString(PrimaryServerPage.Values[0]); 
    end; 
end; 


[run] 
Filename: {sys}\sc.exe; Parameters: "create PCPrintProvider start= auto binPath= ""{app}\providers\print\win\pc-print.exe PCPrintProvider"" depend= Spooler" ; Flags: runhidden ; BeforeInstall: CurStepChanged 
Filename: {sys}\sc.exe; Parameters: "start PCPrintProvider" ; Flags: runhidden ; BeforeInstall: CurStepChanged 
+0

你有沒有嘗試使用** **檢查PARAM在[運行]部分? –

回答

3

你必須定義自己的程序爲BeforeInstall parameter嘗試:

[Run] 
Filename: {sys}\sc.exe; \ 
    Parameters: "create PCPrintProvider start= auto binPath= ""{app}\providers\print\win\pc-print.exe PCPrintProvider"" depend= Spooler"; \ 
    Flags: runhidden; BeforeInstall: ReplaceIPAddress 
[Code] 

procedure ReplaceIPAddress; 
begin 
    FileReplaceString(PrimaryServerPage.Values[0]); 
end; 
+0

我應該在哪裏插入附加代碼?我已經有了CurStepChanged過程,插入它還是保持單獨? – Matt

+1

分開。它與CurStepChanged沒有任何關係。而你實際上需要刪除'CurStepChanged'。 –

1

使用Check PARAM

[run] 
Filename: {sys}\sc.exe; Parameters: "create PCPrintProvider start= auto binPath= ""{app}\providers\print\win\pc-print.exe PCPrintProvider"" depend= Spooler" ; Flags: runhidden ; Check: IsIpChanged; 

[code] 
function IsIpChanged: Boolean; 
begin 
    FileReplaceString(PrimaryServerPage.Values[0]); 
    Result := True; 
end; 
+1

儘管這確實有效,但它確實是一種破解,而且非常不直觀。 –

相關問題