设置编译器标志时,Inno Setup中的删除(或不创建)开始菜单快捷方式 [英] Delete (or do not create) Start menu shortcuts in Inno Setup when compiler flag is set

查看:84
本文介绍了设置编译器标志时,Inno Setup中的删除(或不创建)开始菜单快捷方式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Ant脚本来编译Java程序(我想要分发的那个),创建几个不同的可执行文件和设置文件(以运行不同的配置),然后启动一个Inno安装脚本将它们放到一个安装程序中。Ant脚本定义了许多属性(主要是路径名和文件名),这些属性将作为常量传递给Inno设置脚本。

我有一个用户需要特殊的可执行文件。无需维护两个不同的Ant脚本,让Ant脚本始终创建可执行文件很容易。但我也将属性字段(fullJRE)设置为0或1,具体取决于是否需要可执行文件。该属性作为常量传递给Inno Setup,然后在[code]部分中用来保留/删除末尾的文件。执行此操作的函数是从CurStepChanged过程调用的,使用CurStep=ssPostInstall

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]运行时,该文件仍然存在。根据fullJRE常量,我需要同时保留文件和快捷方式,或者同时删除它们。

有没有办法让我可以:

  1. Icons部分添加‘if’语句以防止创建某些图标
  2. 当我删除文件时,在安装结束时删除多余的快捷方式

任何帮助都将不胜感激。非常感谢!

推荐答案

您的fullJRE"常量"实际上是preprocessor variable

您可以在任何预处理器指令中使用它来预处理Inno安装脚本,使其看起来符合您的需要。

在这种情况下,您可以使用#if directive

[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安装脚本的最末尾添加SaveToFile调用也请参阅预处理器生成的内容:

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

参见Inno Setup: How do I see the output (translation) of the Inno Setup Preprocessor?


顺便说一下,在这种情况下,约定是定义一个"标志",而不是定义一个有值的变量。

因此,请执行/DfullJRE并使用#ifdef and #ifndef directives,而不是/DfullJRE=1

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

这篇关于设置编译器标志时,Inno Setup中的删除(或不创建)开始菜单快捷方式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆