Configure Launch4J to use 32-bit JVM only

前端 未结 8 1081
深忆病人
深忆病人 2020-12-29 12:58

I\'m using Launch4J to start my Java application and if an x64 JRE is present on the system, Launch4J seems to prefer it.

Unfortunately my application cannot run on

相关标签:
8条回答
  • 2020-12-29 13:35

    You will have to add a JVM parameter while configuring.

    It is shown in the below post on how to add it:

    http://www.technimi.com/index.php?do=/group/java/forum/building-an-exe-using-launch4j-for-32-bit-jvm/

    0 讨论(0)
  • 2020-12-29 13:43

    I encountered the same problem some time ago and forked the project, so that the User interface exposes an option to force that a 32bit JVM ought to be found, you can grab the installer of launch4j 3.0.3 with the patch from:

    http://fbergmann.github.io/launch4j/files/SetupLaunch4j_3.0.3.exe

    and read more here:

    http://frank-fbergmann.blogspot.de/2012/11/launch4j-for-32bit.html
    http://fbergmann.github.io/launch4j/

    0 讨论(0)
  • 2020-12-29 13:45

    I had this exact problem about a year ago, using Lauch4J to wrap a small Java program that required a 32-bit DLL (swt-win32.dll, as it happened).

    I found that if there were 32-bit and 64-bit JVMs installed, Launch4J would always favour the 64-bit one. It would only work if the 64-bit JVM was uninstalled, which was obviously not a practical solution.

    I found no way of getting Launch4J to prefer (and require) the 32-bit JVM, after searching quite a bit and posting questions on its forum.

    Therefore, I evaluated a good number of alternative JRE converters (I used this list: http://www.excelsior-usa.com/articles/java-to-exe.html).

    I ended up settling on Jar2Exe, which was the only one that had the features I needed. It's not free, though there is an evaluation version, and I think it wasn't expensive.

    Hope this helps!

    0 讨论(0)
  • 2020-12-29 13:45

    If you don't mind including a copy of JDK with your app, try passing these arguments (in the MyApp.ini) to launch4j:

    -D32 -Djava.home=d:\MyApp\JDK32 -Djava.ext.dirs=d:\MyApp\JDK32\jre\lib\ext 
    

    There are also other things going on here that you could use:

    If you don't package the JRE, you can set the Launch4j option to use "jreOnly" and then, using the DOS environment variable called "%ProgramFiles%" you can locate the 32-bit or the 64-bit JRE in the expected location, depending on whether you used the SysWOW64 32-bit cmd.exe shell or the regular 64-bit shell. Then you can pass these options to the JVM:

    -D32 -Djava.home=%ProgramFiles%\Java\JREDIR -Djava.ext.dirs=%ProgramFiles%\Java\JREDIR\lib\ext 
    

    or

    -D32 -Djava.home=%ProgramFiles(x86)%\Java\JREDIR -Djava.ext.dirs=%ProgramFiles(x86)%\Java\JREDIR\lib\ext 
    
    0 讨论(0)
  • 2020-12-29 13:48

    For any users of Launch4j applications like Areca that get stung by this one, and need a quick work around, look in the directory where the application is launched and you will find a complete java command line to run your program inside a file named launch4j.log. Just make a bat file or script using the java vm you prefer and run it with the full command line in the log.

    0 讨论(0)
  • 2020-12-29 13:51

    I don't know Launch4J, but you can get the Information about 32/64 by reading System.getProperty("os.arch");. If you encounter a 64-bit system you may quit the installer with a nice message, to tell the User to install a 32-bit JVM.

    You may Wrap your startUp-Code with an Wrapper to show a Message-Box to the user.

    public static void main(String[] args]){
    
       String architecture = System.getProperty("os.arch");
       // Did not test the return value of this property,,but should work
       if("64".equals(architecture)){
           // Show a dialog, or print a logmessage
           System.exit(-1);
       }
       // Start my APP
       com.something.startup.main(args);
    }
    
    0 讨论(0)
提交回复
热议问题