0

Is anyone having a problem running a Windows Service with JavaExe, and is there a solution?

The JavaExe examples all work except for the Service examples, Example3, Example5, and Example23. In each case, the Windows Service gets created, but any attempt to start the service brings a popup error message:

"The system cannot find the file specified."

There is a registry entry for the serivce which contains the following:
Name: ImagePath
Type: REG_EXPAND_SZ
Data: "\JavaExe\JavaExe\doc\examples\3 - Service\Example3.exe" __RunService__

If I run Example3.exe from a command line with the argument __RunService__, then a Java process starts and runs briefly before crashing.

The examples are all self-contained in the JavaExe download, so it's hard to see how there could be missing libraries.

Background: JavaExe (http://devwizard.free.fr/html/en/JavaExe.html) appears to implement a sound approach to allowing a Java application program to be invoked from another Java program running as a service. Windows prevents services from accessing the desktop, so JavaExe sets up a socket connection between the service and the application Java program, each running as a User process, as outlined here: http://msdn.microsoft.com/en-us/library/windows/desktop/ms683502(v=vs.85).aspx

Windows 7 x64 (but it fails in the same way on XP [SEE UPDATE BELOW])
Java version 1.7.0_45

--

UPDATE:

The developer replied to my email and advised that 32-bit and 64-bit Java versions were being confused.
I straightened this out. The Example3 Service, run from the .exe and .jar files obtained from the JavaExe .zip download (which are all 32 bit by default), now run correctly on WinXP (x86).

For x64 machines, it is necessary to recompile the jar files using the package's compilx64.bat script. (And to use the x64 versions of JaveExe.exe as stated in the documentation.)

I did these things but the Example3 service still fails to start, with the error, "The system cannot find the file specified."

The .jar files built from compilx64.bat are mostly identical to the x86 versions, but a few contain .class files that are a few bytes larger. I assume that the code must therefore be referring to native libraries? And maybe some are not found? But which ones?

When I type sc qc Example3 I get:
TYPE: : 10 WIN32_OWN_PROCESS
START_TYPE: 2 AUTO_START
ERROR_CONTROL: 1 NORMAL
BINARY_PATH_NAME : "[...filepath...]\JavaExe\JavaExe\doc\examples\3 - Service\Example3.exe" __RunService__
LOAD_ORDER_GROUP: 0
DISPLAY_NAME: JavaExe : Example3
DEPENDENCIES: eventlog
SERVICE_START_NAME: LocalSystem

user1792609
  • 191
  • 1
  • 2
  • 8
  • where comes from this registry entry ? if you type in console DOS : "sc qc XXX" where XXX is the name of your service, what do you see ? – bb67 Apr 01 '14 at 02:27
  • this error seems come from your installation of JavaExe's examples. Are you unzipped the JavaExe.zip before running examples ? why did it not find the file after creation ? –  Apr 01 '14 at 02:54
  • your "filepath" is a temporary folder ? Is that still exists Example3.exe before starting the sevice ? what is the full "filepath" ? – bb67 Apr 01 '14 at 20:28

1 Answers1

1

Answer:

The filepath to the Example3.exe was on a network drive.

To get a Windows Service to run from a network drive is either impossible or requires considerable contortions. See for example,
Map a network drive to be used by a service

When I moved everything to the local C: drive, it worked.

Thank you to bb67 for providing the hints that led to figuring this out.

Community
  • 1
  • 1
user1792609
  • 191
  • 1
  • 2
  • 8