Tuesday, December 3, 2013

When multiple versions of Java are installed, what version wins?

The flow is, latest version > 64-bit > 32-bitWhile the flow is understandable, different flows are used and present the following experiences.

Java Web Start


The installer registers the JNLP file association. This is a per-system registration and does not have corresponding 32-bit/64-bit entries.

A problem arises when both 32-bit and 64-bit of the same version are installed. The 64-bit version is registered and causes calls that require the 32-bit version to fail. For example, opening a JNLP file within the 32-bit version of Internet Explorer.

Control Panel


The installer uses the same GUID for Java 1.5, 1.6, 1.6 (x64), 1.7 and 1.7 (x64) when registering the Control Panel applet. This GUID is placed in both the 32-bit and 64-bit sections of the registry. When both 32-bit and 64-bit versions are installed, Windows uses the 64-bit registry section entry and discards the 32-bit section entry.

A problem arises when both 32-bit and 64-bit of the same version are installed. The the 64-bit version is available in the Control Panel allowing 64-bit versions to be managed. Conversely, the 32-bit version is not available in the Control Panel which does not allow 32-bit versions to be managed. For example, when using the 32-bit version of Internet Explorer users can manage which versions are available. This cannot be done if the user cannot manage the 32-bit versions.

Saturday, November 23, 2013

Windows 8 0xC0000001

Error 0xC0000001 was encountered when a Windows 8 system was booted from a drive image that was restored using Active@ Disk Image. The drive utilized Unified Extensible Firmware Interface (UEFI) and a GUID Partition Table (GPT).

Booting the system using Microsoft Diagnostic and Repair Tool (DaRT) and enumerating the Boot Configuration Data (BCD) showed that both the device and osdevice settings on the {default} entry were unknown.

To resolve this issue, the following was done:
  1. Locate the partition drive letter for the drive containing the OS. (In this instance, drive C.)
  2. Set device setting on the {default} entry to Partition={DriveLetter}:. (in this instance, Partition=C:)
  3. Set osdevice setting on the {default} entry to Partition={DriveLetter}:. (in this instance, Partition=C:)
GUID
Globally Unique Identifier
0xC0000001
STATUS_UNSUCCESSFUL
{Operation Failed} The requested operation was unsuccessful.

Symantec Management Platform Agent and Package Server Vulnerability

The Symantec Management Platform Symantec Management Agent and/or Package Server Agent Disk Space Check and Drive Overflow features can potentially cause the space of it's system drive to be fully consumed. When this occurs, no additional data can be written to the drive, such as security patches or antivirus definitions.

As an example, a system where the Package Server Agent is installed on drive D. The Package Server was assigned more packages than the D drive had space for. The only drive with enough space for the download was the system drive, drive C. This drive was promptly consumed of drive space. After this it was noticed that antivirus definitions for Thursday, November 21, 2013 are for Wednesday, November 20, 2013 r25, but a system having this issue is nearly a month old.


Drive Space Check will check whether there is free space available on the drive containing the Package Server Agent installation. The amount of free space on a drive must be, at least, the value of the Min Disk Free Space (Mbytes) registry key in addition to 120% of the download size. If there is enough drive space, it will download it to this drive. If there is not enough drive space, the Drive Overflow feature is implemented.

Drive Overflow will check whether a drive, other than the drive containing the Package Server Agent installation, has available disk space for the download. If space is available on the drive, a folder will be created using the Package Server Agent installation path, replacing the drive letter with the drive letter of the using a path as the  has the space and download there, if no other drive has this space then it will not download the package.

Thursday, November 14, 2013

Silent Upgrade with In-Use Files Leaves Java Uninstalled (In-Progress)

This has been submitted to Oracle and entered as a bug into their bug tracking system under Bug Id: 9009448. This bug is not publicly available.

This issue is active. This page may be updated with additional information as it becomes available.

This issue was experienced when:
  • Java 7 Update 11 to Java 7 Update 25 Upgrade on Windows x64
  • Java 7 Update 25 to Java 7 Update 45 Upgrade on Windows x64
  • Java 7 Update 45 to Java 7 Update 51 Upgrade on Windows x64
    This document focuses on the Java 7 Update 25 to Java 7 Update 45 Upgrade on Windows x64.

Issue

When Java is upgraded using the silent switch (/s) with the installer executable and Java files are in-use, the following is experienced:
  • Java web sites and applets no longer work
  • Java version verification site showed no version installed
  • The previous version of Java was partially uninstalled from the file system
  • The previous version of Java was removed from Programs and Features (aka Add/Remove Programs)
  • The new version of Java was not installed on the file system
    * Java 7 Update 51: Files were installed in the Program Files folder, but missing from SysWOW64
  • The new version of Java was added to Programs and Features (aka Add/Remove Programs)
  • Java Control Panel applet is missing

What does this mean?

Most companies inventory a system using Programs and Features (aka Add/Remove Program) data. Moreover, most companies use patch software that detects installed versions that require patching. Both of these processes break when Java's installer causes this issue. The program shows as installed when the product is definitely not which will throw off installed totals, etc. Patching solutions will show the system as not requiring a patch or as even having the software.

Cause

The versions of Java were not packaged correctly to work when installations are performed silently. They neither take advantage of Windows Installer functionality nor address errors encountered. When an in-use file is encountered, the installation silently continues instead of rolling back.

This is different from installations that are not silent; during those installations the user is prompted to close the programs identified as having files in-use.

Additional Information

The executable is a wrapper that extracts a Windows Installer package. The Windows Installer package does not install the software, but instead places the installation files on the file system and runs Custom Actions to install Java.

When installing software on a given platform, a company must hire persons with the skill set to properly package software using technologies for that platform; in this case Windows Installer.

This issue is different, almost the exact opposite, of that described in JDK-7042296 : Silent Installations Break Java Installation, http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7042296, that was opened on 05/05/2011 and still has the status of Open and is Unresolved. This shows how much the vendor cares about their product and the persons/companies using it.

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft is populated with Java 7 Update 45 data.

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall is populated with Java 7 Update 45 data.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations is populated with Java 7 Update 45 data. This makes it impossible to install Java until the system is rebooted or the data for the value is modified to remove Java-specific entries.

Neither a repair nor an installation over the currently broken version can be performed. A full uninstall/install will be required.

Steps to Reproduce

Note: Java 7 Update 25 / Java 7 Update 45
  1. Install Java 7 Update 25
    (jre-7u25-windows-i586.exe /s /norestart /L %windir%\system32\LogFiles\jre-7u25-windows-i586_inst.log)
  2. Verify the installed Java web browser version
    1. Open https://www.java.com/en/download/installed.jsp?detect=jre
    2. Click Run when asked "Do you want to run this application?"
      Do not check the checkbox to "not show again"
    3. Version shows as Java 7 Update 25
    4. Close the web page.
  3. Verify the installed Java system version
    1. Open Java Control Panel (32-bit)
      (
      "%ProgramFiles% (x86)\Java\jre7\bin\javacpl.exe")
    2. Select the Java tab
    3. Select the User tab; version is 1.7.0_25
    4. Select the System tab; version is 1.7.0_25
    5. Close Java Conrol Panel (32-bit)
  4. Verify the installed Java executables
    1. Open a Command Prompt
    2. Type: DIR %WINDIR%\SysWOW64\java*
    3. Returns a list of Java executables
    4. Close Command Prompt
  5. Verify the installed Java in Programs and Features
    1. Open/Refresh Programs and Features in Control Panel
    2. Java 7 Update 25 is shown
    3. Close Programs and Features
  6. Verify the installed Java web browser version
    1. Open https://www.java.com/en/download/installed.jsp?detect=jre
    2. Do nothing when asked "Do you want to run this application?"
  7. Install Java 7 Update 45
    (
    jre-7u45-windows-i586.exe /s /norestart /L %windir%\system32\LogFiles\jre-7u45-windows-i586_inst.log)
  8. Review the installation log.
    (%windir%\system32\LogFiles\jre-7u45-windows-i586_inst.log)
    1. The log showed 1603 errors
      1. Must reboot to complete operation.
      2. Close that application and retry.
    2. The log showed the installation was successful.
      1. Windows Installer installed the product. Product Name: Java 7 Update 45. Product Version: 7.0.450. Product Language: 1033. Manufacturer: Oracle. Installation success or error status: 0.
  9. Close the web browser.
  10. Verify the installed Java web browser version
    1. Open https://www.java.com/en/download/installed.jsp?detect=jre
    2. Click Run when asked "Do you want to run this application?"
      Do not check the checkbox to "not show again"
    3. Version check errors
    4. Close the web page.
  11. Verify the installed Java system version
    1. Open Java Control Panel (32-bit)
      (
      "%ProgramFiles% (x86)\Java\jre7\bin\javacpl.exe")
    2. Select the Java tab
    3. Select the User tab; version is 1.7.0_25
    4. Select the System tab; version is 1.7.0_25
    5. Close Java Conrol Panel (32-bit)
  12. Verify the installed Java executables
    1. Open a Command Prompt
    2. Type: DIR %WINDIR%\SysWOW64\java*
    3. Returns File not found
    4. Close Command Prompt
  13. Verify the installed Java in Programs and Features
    1. Open/Refresh Programs and Features in Control Panel
    2. Java 7 Update 45 is shown
    3. Close Programs and Features

Thursday, August 1, 2013

Disabling IPv6 causes 389/UDP to fail on domain controllers

Issue

When querying UDP port 389 locally on, or remotely to, a domain controller it fails with "LDAP query to port 389 failed Server did not respond to LDAP query"

Cause

One or more IPv6 components were disabled.


On the domain controller used in this example, the following command was used to disable IPv6:


The following commands will also cause this failure:



The following spreadsheet shows a breakdown of how the DisableComponents registry value affects 389/udp.


Resolution

Use any or all of the following commands to re-enable IPv6.

NOTE A reboot of the system is required when disabling or enabling IPv6 components.

Result

After re-enabling IPv6, querying 389/UDP completes successfully.


Conclusion

An environment that utilizes IPv4 and wishes to remove complexity by removing IPv6 may be surprised to find that its not so easily removed. Microsoft's Article, How to disable IP version 6 or its specific components in Windows, explains that the DisabledComponents registry key method is the correct way to disable IPv6. This article also states, "We do not recommend disabling IPv6. However, if you must disable IPv6 or components of IPv6, follow the steps in this article." Unfortunately, disabling IPv6 causes this known failure and may cause other unknown failures.

Friday, January 25, 2013


The Problem

iMessage is a feature for messaging between iOS devices. A problem arises when a user switches to another operating system, such as Google Android, but keeps the same phone number.

An Example

Kate and Henry both have iPhones and both of them use iMessage. Kate decides to trade-in her iPhone for a Samsung Galaxy. That night, Henry texts Kate some information. (Seems simple enough)

Neither Kate nor Henry are aware there is an issue. To Henry, the text went through because iMessage said it did. Kate never got the message because iMessage doesn't work with non-iOS devices.

How to disable iMessage for a device that is no longer needed
  1. Go to https://supportprofile.apple.com
  2. Sign in with the Apple ID the device was registered under.

  3. Click on Edit Products
  4. Click on the X to the right of the device.

  5. Click Unregister