directory - personalizar el directorio de instalación en install4j
(2)
Puede cambiar el directorio de instalación llamando
context.setInstallationDirectory(...);
en una acción "Ejecutar script" o cualquier fragmento de código en install4j.
La instalación de los nombres de los iniciadores en el tiempo de ejecución no está soportada directamente por install4j.
Estoy construyendo una instalación en install4j que se ejecutará para cada cliente de una agencia de marketing. Hay un instalador, pero el usuario puede ejecutarlo más de una vez, especificando un valor diferente de clientId en el momento de la instalación. Al final, me gustaría terminar con una estructura de directorios como esta:
en Mac:
/Applications/MYPRODUCTNAME-clientID1/
/Applications/MYPRODUCTNAME-clientID2/
/Applications/MYPRODUCTNAME-clientID3/
en Windows:
/Program Files/MYPRODUCTNAME-clientID1/
/Program Files/MYPRODUCTNAME-clientID2/
/Program Files/MYPRODUCTNAME-clientID3/
Donde los ID se ingresan en el momento de la instalación, en el instalador independiente se ejecuta. Los identificadores no se conocen de antemano. No puedo crear tantos instaladores como identificaciones. Idealmente, en Mac, también preferiría cambiar el nombre del archivo de inicio, para que se pueda distinguir fácilmente de los demás en la búsqueda de Spotlight. He estado jugando con Directory Resolver: sin suerte, especialmente en Mac, que parece producir un launcher roto en cada intento de cambiar su estructura de directorios.
¡Cualquier ayuda será apreciada!
Terminé haciendo algo como esto:
En la activación de la ventana de Ubicación:
systemInstallPath = context.getVariable( "sys.programFilesDir" ); // if Windows
if( systemInstallPath == null || systemInstallPath.isEmpty() ) // assume Mac
systemInstallPath = "/Applications";
context.setInstallationDirectory( new File( systemInstallPath ) );
Luego, en la activación de la ventana de Instalación:
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 );
}
Eso hizo el truco.