簡體   English   中英

設置編譯器標志時刪除(或不創建)Inno Setup 中的開始菜單快捷方式

[英]Delete (or do not create) Start menu shortcuts in Inno Setup when compiler flag is set

我有一個 Ant 腳本來編譯一個 Java 程序(我想分發的那個),創建幾個不同的可執行文件和設置文件(以運行不同的配置),然后啟動一個 Inno Setup 腳本以將它們全部放在一個安裝程序中。 Ant 腳本定義了許多屬性(主要是路徑名和文件名),它們作為常量傳遞給 Inno Setup 腳本。

我有一個用戶需要一個特殊的可執行文件。 與其維護兩個不同的 Ant 腳本,不如讓 Ant 腳本始終創建可執行文件。 但我還將屬性字段 ( fullJRE ) 設置為 0 或 1,具體取決於是否需要可執行文件。 該屬性作為常量傳遞給 Inno Setup,然后在 [code] 部分中用於在最后保留/刪除文件。 使用CurStep=ssPostInstallCurStepChanged過程調用執行此操作的函數:

procedure CurStepChanged(CurStep: TSetupStep);
begin
   if CurStep=ssPostInstall then
      begin
         updateINI();
      end
end;

function updateINI(): boolean;
begin
   if ({#fullJRE} = 0) then
      begin
         DeleteFile(ExpandConstant('{app}\{#launcherName}.exe'));
      end;
end;

但是在腳本的 Icons 部分創建了可執行文件的快捷方式,因為當運行 [icons] 時,該文件仍然存在。 基於fullJRE常量,我要么需要同時保留文件和快捷方式,要么同時刪除它們。

有沒有辦法我可以:

  1. Icons部分添加“if”語句以防止創建某些圖標
  2. 在安裝結束時刪除額外的快捷方式,當我刪除文件時

任何幫助,將不勝感激。 非常感謝!

您的fullJRE “常量”實際上是一個預處理器變量

您可以在任何預處理器指令中使用它來預處理您的 Inno Setup 腳本,使其看起來符合您的需要。

在這種情況下,您可以使用#if指令

[Icons]
#if fullJRE == "1"
Name: "{group}\My Program"
#endif

即使對於updateINI代碼,您也應該這樣做。 您當前的方法會生成不必要的代碼,例如:

function updateINI(): boolean;
begin
   if (1 = 0) then
      begin
         DeleteFile(ExpandConstant('{app}\{#launcherName}.exe'));
      end;
end;

雖然您實際上可以通過執行以下操作使預處理器完全刪除該代碼:

#if fullJRE == "0"

procedure CurStepChanged(CurStep: TSetupStep);
begin
   if CurStep=ssPostInstall then
      begin
         updateINI();
      end
end;

function updateINI(): boolean;
begin
   DeleteFile(ExpandConstant('{app}\{#launcherName}.exe'));
end;

#endif

在 Inno Setup 腳本的最后添加一個SaveToFile調用,看看預處理器生成了什么:

#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")

請參閱Inno Setup:如何查看 Inno Setup 預處理器的輸出(翻譯)?


順便說一句,在這種情況下,約定是定義一個“標志”,而不是一個帶有值的變量。

因此,不要使用/DfullJRE=1/DfullJRE使用/DfullJRE並使用#ifdef#ifndef指令

[Icons]
#ifdef fullJRE
Name: "{group}\My Program"
#endif

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM