在install4j中自定义安装目录

时间:2012-08-22 04:58:33

标签: java directory install4j

我正在install4j中构建一个设置,它将为营销机构的每个客户运行。有一个安装程序,但用户可以多次运行它,在安装时指定不同的clientId值。最后,我想得到一个像这样的目录结构:

在Mac上:

/Applications/MYPRODUCTNAME-clientID1/
/Applications/MYPRODUCTNAME-clientID2/
/Applications/MYPRODUCTNAME-clientID3/
Windows上的

/Program Files/MYPRODUCTNAME-clientID1/
/Program Files/MYPRODUCTNAME-clientID2/
/Program Files/MYPRODUCTNAME-clientID3/

在安装时输入ID,在独立安装程序运行中。这些ID事先不知道 - 我无法构建与ID相同数量的安装程序。 理想情况下,在Mac上,我还希望更改启动器文件的名称,以便可以轻松地从Spotlight搜索中的其他文件中识别它。 我一直在使用目录解析器 - 没有运气,尤其是在Mac上,每次尝试更改其目录结构时都会产生破碎的启动器。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:4)

您可以通过调用

来更改安装目录
context.setInstallationDirectory(...);

在"运行脚本"动作或install4j中的任何代码段。

install4j不直接支持在运行时更改启动器名称。

答案 1 :(得分:0)

我最终做了这样的事情:

激活位置窗口时:

systemInstallPath = context.getVariable( "sys.programFilesDir" ); // if Windows
if( systemInstallPath == null || systemInstallPath.isEmpty() ) // assume Mac
  systemInstallPath = "/Applications";
context.setInstallationDirectory( new File( systemInstallPath ) );

然后激活安装窗口:

final Boolean confirmedUpdate = context.getBooleanVariable("sys.confirmedUpdateInstallation");
if( confirmedUpdate == null || !confirmedUpdate ) {
  final File originalInstallDir = context.getInstallationDirectory();
  final String clientId = ( String )context.getVariable( "clientId" );
  final File clientInstallDir = new File( originalInstallDir, "MYPRODUCTNAME-" + clientId );
  context.setInstallationDirectory( clientInstallDir );
}

这就是诀窍。