WEBUTIL_HOST.HOST (or CLIENT_HOST) Stops Working when Using JRE 8+ or JRE 7U21+ or JRE 6U45+ With Either No Errors or WUC-15

WEBUTIL_HOST.HOST (or CLIENT_HOST) Stops Working when Using JRE 8+ or JRE 7U21+ or JRE 6U45+ With Ei

WEBUTIL_HOST.HOST (or CLIENT_HOST) Stops Working when Using JRE 8+ or JRE 7U21+ or JRE 6U45+ With Ei

Titleimage

Posted by Patrick Hamou on 2017:09:26 22:50:14

APPLIES TO: Oracle Forms

Oracle Forms - Version 10.1.2.3.0 and later
Information in this document applies to any platform.

SYMPTOMS : JRE (Java Runtime Environment), WEBUTIL_HOST.HOST and/or CLIENT_HOST fail

After upgrading the client JRE (Java Runtime Environment) to version 1.7.0_21+ (JRE 7u21+) or 1.6.0_45+ (JRE 6u45+) or JRE 8+, certain commands issued by WEBUTIL_HOST.HOST and/or CLIENT_HOST fail. No errors are reported within Forms or the Java Console.

CHANGES : upgrading the client JRE

 The user client machines were upgraded to JRE 8+ or JRE 7U21+ or 6U45+

CAUSE change made to the Java Plugin

The failure is the result of a change made to the Java Plugin.  This change causes each blank space in a string to be assumed an argument.  In cases where the command or executible contains blank spaces (i.e. in the path), Java misinterprets the request.  More details can be found in the Java 7U21 and 7U25 release notes, which can be found HERE.

Here is an example of the Forms code which may be failing:

webutil_host.host('C:\Program Files\Internet Explorer\iexplore.exe');

Note the blank spaces in the path to iexplorer.exe

Enabling WebUtil logging will present the following error(s) reported in the Java Console.

2013-Apr-19  15:56:38.404 WUH[setProperty()] Setting property WUH_EXECUTION_MODE to 0
2013-Apr-19  15:56:38.404 WUH[setProperty()] Setting property WUH_EXECUTE to c:\Program Files\Internet Explorer\iexplore.exe
2013-Apr-19  15:56:38.404 WUH[setProperty()] Setting property WUH_EXECUTE to 
2013-Apr-19  15:56:38.405 WUH[Host.executeHost()] c:\Program Files\Internet Explorer\iexplore.exe
2013-Apr-19  15:56:38.406 WUH[HostCommand.execute()] c:\Program Files\Internet Explorer\iexplore.exe
2013-Apr-19  15:56:38.411 WUH[HostCommand.execute()] IOException: Cannot run program "c:\Program": CreateProcess error=2, The system cannot find the file specified
mproId1

 

Another reported case is when doing something like the following code : 

WEBUTIL_HOST.NONBLOCKING('cmd /c "C:\Program Files (x86)\Microsoft Office\Office14\winword.exe" "C:\temp\Test document.doc"');

In this case, it fails with the following exception in the Java Console.

java.lang.IllegalArgumentException: Executable name has embedded quote, split the arguments
at java.lang.ProcessImpl.isQuoted(Unknown Source)
at java.lang.ProcessImpl.getExecutablePath(Unknown Source)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at oracle.forms.webutil.host.HostCommand.execute(Unknown Source)
at oracle.forms.webutil.host.HostCommand.run(Unknown Source)
<dateStamp> ERROR>WUC-15 [HostCommand.execute()] Onverwachte fout; uitzondering: java.lang.IllegalArgumentException: Executable name has embedded quote, split the arguments

 

 

SOLUTION : Patch:16686443

The bug is fixed in the generic one-off Patch:16686443 which can be applied on top of 11.1.2.1 or 11.1.1.7

IMPORTANT : Please make sure you download the correct patch for the correct version of Oracle Forms being used. Eg, 11.1.2.1 or 11.1.1.7

 

If the Patch:16686443 is not available for your version then you can adopt the following workaround:

 

IMPORTANT

The above patch will require some amendments to your Forms Code and Applet parameters. For example, you will require

1.      The forms applet parameter WebUtilNextGenHost to be set to TRUE

2.      That you code to WEBUTIL_HOST (or CLIENT_HOST) to be encapsulated in double-quotes (eg ") and if the code uses double-quotes in the string itself, it will need to be escaped with a back-slash (eg \). For example,

cmd /c "dir C:\ > \"C:\tmp\my directory\dir.txt\""

 See NOTE:1568659.1 or the Patch README for further details.

WORKAROUND

Amend the code so that it uses short names (DOS 8dot3 notation).

webutil_host.host('C:\PROGRA~1\INTERN~1\iexplore.exe');

 Also, if the application is required to open content files (e.g. .doc, .pdf, .txt, .mp3, etc), the following code can be used.  Simply pass in the path and file name.  Do not include a reference to the associated executible which normally opens the content.  This will be handled by the OS.

Declare
    my_cmd varchar2(255);
Begin
    my_cmd := 'rundll32 shell32,ShellExec_RunDLL '|| :t1; -- :t1 could be a text field where users enter the path and name of the file they want to open
    CLIENT_HOST(my_cmd);
End;

* Also refer to Note 1568659.1

 

Return to Blog