Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8345829
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 9, 20262026-06-09T06:48:37+00:00 2026-06-09T06:48:37+00:00

I am writing an executable from a PowerShell script that needs to put the

  • 0

I am writing an executable from a PowerShell script that needs to put the proper version of Java3D onto the client computer. By proper version, I mean that when the user opens CMD and types ‘java -version’, it gives 32 or 64 bit. I need to choose the dll files for the right architecture.

The problem is, I have found a test case of a 64-bit W7 system with both 32-bit and 64-bit JDK installed. Only the 64-bit version is included in the PATH environment variable. However, when I run my batch script or executable and echo java -version, the 32-bit java comes up. As such, it installs the 32-bit dlls, and when the user goes to the cmd it uses 64-bit so it is not compatible.

Since the 32-bit JDK is not included in the PATH variable, why is the script running 32-bit java and where is it getting this link?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-09T06:48:38+00:00Added an answer on June 9, 2026 at 6:48 am

    Google Chrome and Firefox are still 32-bit applications under a 64-bit Windows OS, so you are probably executing a 32-bit java installed by them under SysWOW64 – specially if you are installing your application using Java Web Start running inside one of these browsers.

    I had the exact same problem, and I’ve implemented a system-wide search for installed javas, so that I can create a batch file that calls the exact java.exe with the proper bitness.

    This is what you need:

    /**
     * Java Finder by petrucio@stackoverflow(828681) is licensed under a Creative Commons Attribution 3.0 Unported License.
     * Needs WinRegistry.java. Get it at: https://stackoverflow.com/questions/62289/read-write-to-windows-registry-using-java
     *
     * JavaFinder - Windows-specific classes to search for all installed versions of java on this system
     * Author: petrucio@stackoverflow (828681)
     *****************************************************************************/
    
    import java.util.*;
    import java.io.*;
    
    /**
     * Helper class to fetch the stdout and stderr outputs from started Runtime execs
     * Modified from http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4
     *****************************************************************************/
    class RuntimeStreamer extends Thread {
        InputStream is;
        String lines;
    
        RuntimeStreamer(InputStream is) {
            this.is = is;
            this.lines = "";
        }
        public String contents() {
            return this.lines;
        }
    
        public void run() {
            try {
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader    br  = new BufferedReader(isr);
                String line = null;
                while ( (line = br.readLine()) != null) {
                    this.lines += line + "\n";
                }
            } catch (IOException ioe) {
                ioe.printStackTrace();  
            }
        }
    
        /**
         * Execute a command and wait for it to finish
         * @return The resulting stdout and stderr outputs concatenated
         ****************************************************************************/
        public static String execute(String[] cmdArray) {
            try {
                Runtime runtime = Runtime.getRuntime();
                Process proc = runtime.exec(cmdArray);
                RuntimeStreamer outputStreamer = new RuntimeStreamer(proc.getInputStream());
                RuntimeStreamer errorStreamer  = new RuntimeStreamer(proc.getErrorStream());
                outputStreamer.start();
                errorStreamer.start();
                proc.waitFor();
                return outputStreamer.contents() + errorStreamer.contents();
            } catch (Throwable t) {
                t.printStackTrace();
            }
            return null;
        }
        public static String execute(String cmd) {
            String[] cmdArray = { cmd };
            return RuntimeStreamer.execute(cmdArray);
        }
    }
    
    /**
     * Helper struct to hold information about one installed java version
     ****************************************************************************/
    class JavaInfo {
        public String  path;        //! Full path to java.exe executable file
        public String  version;     //! Version string. "Unkown" if the java process returned non-standard version string
        public boolean is64bits;    //! true for 64-bit javas, false for 32
    
        /**
         * Calls 'javaPath -version' and parses the results
         * @param javaPath: path to a java.exe executable
         ****************************************************************************/
        public JavaInfo(String javaPath) {
            String versionInfo = RuntimeStreamer.execute( new String[] { javaPath, "-version" } );
            String[] tokens = versionInfo.split("\"");
    
            if (tokens.length < 2) this.version = "Unkown";
            else this.version = tokens[1];
            this.is64bits = versionInfo.toUpperCase().contains("64-BIT");
            this.path     = javaPath;
        }
    
        /**
         * @return Human-readable contents of this JavaInfo instance
         ****************************************************************************/
        public String toString() {
            return this.path + ":\n  Version: " + this.version + "\n  Bitness: " + (this.is64bits ? "64-bits" : "32-bits");
        }
    }
    
    /**
     * Windows-specific java versions finder
     *****************************************************************************/
    public class JavaFinder {
    
        /**
         * @return: A list of javaExec paths found under this registry key (rooted at HKEY_LOCAL_MACHINE)
         * @param wow64  0 for standard registry access (32-bits for 32-bit app, 64-bits for 64-bits app)
         *               or WinRegistry.KEY_WOW64_32KEY to force access to 32-bit registry view,
         *               or WinRegistry.KEY_WOW64_64KEY to force access to 64-bit registry view
         * @param previous: Insert all entries from this list at the beggining of the results
         *************************************************************************/
        private static List<String> searchRegistry(String key, int wow64, List<String> previous) {
            List<String> result = previous;
            try {
                List<String> entries = WinRegistry.readStringSubKeys(WinRegistry.HKEY_LOCAL_MACHINE, key, wow64);
                for (int i = 0; entries != null && i < entries.size(); i++) {
                    String val = WinRegistry.readString(WinRegistry.HKEY_LOCAL_MACHINE, key + "\\" + entries.get(i), "JavaHome", wow64);
                    if (!result.contains(val + "\\bin\\java.exe")) {
                        result.add(val + "\\bin\\java.exe");
                    }
                }
            } catch (Throwable t) {
                t.printStackTrace();
            }
            return result;
        }
    
        /**
         * @return: A list of JavaInfo with informations about all javas installed on this machine
         * Searches and returns results in this order:
         *   HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment (32-bits view)
         *   HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment (64-bits view)
         *   HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit     (32-bits view)
         *   HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit     (64-bits view)
         *   WINDIR\system32
         *   WINDIR\SysWOW64
         ****************************************************************************/
        public static List<JavaInfo> findJavas() {
            List<String> javaExecs = new ArrayList<String>();
    
            javaExecs = JavaFinder.searchRegistry("SOFTWARE\\JavaSoft\\Java Runtime Environment", WinRegistry.KEY_WOW64_32KEY, javaExecs);
            javaExecs = JavaFinder.searchRegistry("SOFTWARE\\JavaSoft\\Java Runtime Environment", WinRegistry.KEY_WOW64_64KEY, javaExecs);
            javaExecs = JavaFinder.searchRegistry("SOFTWARE\\JavaSoft\\Java Development Kit",     WinRegistry.KEY_WOW64_32KEY, javaExecs);
            javaExecs = JavaFinder.searchRegistry("SOFTWARE\\JavaSoft\\Java Development Kit",     WinRegistry.KEY_WOW64_64KEY, javaExecs);
    
            javaExecs.add(System.getenv("WINDIR") + "\\system32\\java.exe");
            javaExecs.add(System.getenv("WINDIR") + "\\SysWOW64\\java.exe");
    
            List<JavaInfo> result = new ArrayList<JavaInfo>();
            for (String javaPath: javaExecs) {
                if (!(new File(javaPath).exists())) continue;
                result.add(new JavaInfo(javaPath));
            }
            return result;
        }
    
        /**
         * @return: The path to a java.exe that has the same bitness as the OS
         * (or null if no matching java is found)
         ****************************************************************************/
        public static String getOSBitnessJava() {
            String arch      = System.getenv("PROCESSOR_ARCHITECTURE");
            String wow64Arch = System.getenv("PROCESSOR_ARCHITEW6432");
            boolean isOS64 = arch.endsWith("64") || (wow64Arch != null && wow64Arch.endsWith("64"));
    
            List<JavaInfo> javas = JavaFinder.findJavas();
            for (int i = 0; i < javas.size(); i++) {
                if (javas.get(i).is64bits == isOS64) return javas.get(i).path;
            }
            return null;
        }
    
        /**
         * Standalone testing - lists all Javas in the system
         ****************************************************************************/
        public static void main(String [] args) {
            List<JavaInfo> javas = JavaFinder.findJavas();
            for (int i = 0; i < javas.size(); i++) {
                System.out.println("\n" + javas.get(i));
            }
        }
    }
    

    You will also need the updated WinRegistry.java to read values from both the from 32-bits and 64-bits sections of the windows registry: https://stackoverflow.com/a/11854901/828681

    I’m not usually a java programmer, so my code probably does not follow java conventions. Sue me.

    Here are the results of JavaFinder.findJavas() on my Win 7 64-bits machine:

    >java JavaFinder
    
    C:\Program Files (x86)\Java\jre6\bin\java.exe:
      Version: 1.6.0_31
      Bitness: 32-bits
    
    C:\Program Files\Java\jre6\bin\java.exe:
      Version: 1.6.0_31
      Bitness: 64-bits
    
    D:\Dev\Java\jdk1.6.0_31\bin\java.exe:
      Version: 1.6.0_31
      Bitness: 64-bits
    
    C:\Windows\system32\java.exe:
      Version: 1.6.0_31
      Bitness: 64-bits
    
    C:\Windows\SysWOW64\java.exe:
      Version: 1.6.0_31
      Bitness: 32-bits
    

    Note there’s a 32-bit java.exe under SysWOW64 – and it will get called by the web starter when running inside Chrome or Firefox since they are 32-bit applications – unless you use the JavaFinder to find a properly bitted java.exe and use it’s full path.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I'm writing a python script that uses subprocess.Popen to execute two programs (from compiled
If you are writing a program that is executable from the command line, you
Let's say I am writing installation script for the program which contains executable file
Writing htaccess that allows me to remove index.php from the URL can confuse search
I am writing a release script in powershell and need to invoke a custom
Greetings, I'm in the progress of writing a web server script that lets you
I am writing an executable for an embedded device (an STM32) in C. After
I'm writing a Linux kernel module, and I'd like to allocate an executable page.
Writing documentation in html requires some code examples. What to do with characters that
In one of my courses we're writing our own shell (basically from scratch). We've

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.