This is not a question, I am posting a problem and solution to help others searching for a solution in the future.
A customer gave us a test virtual machine to install our application on, but it was Windows XP Pro (in 2013!) I installed Java 7 update 11, GlassFish 3.1.2.2, our application, and they all work well. However, I could not create a Windows service because of UnauthorizedAccessException, even when I was logged into Windows as Administrator. Another installer program was able to create a Windows service without issue, so it seems to be a GlassFish/Windows Service Wrapper issue. Below is the error that occured:
C:\glassfish\3.1.2.2\bin>asadmin create-service --name GlassFishV3122 domain1
Error while trying to install GlassFish as a Windows Service.
The return value was: -1.
STDERR:
STDOUT: System.UnauthorizedAccessException
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 e
rrorCode, IntPtr errorInfo)
at System.Management.ManagementObjectCollection.ManagementObjectEnumerator.Mo
veNext()
at WMI.WmiRoot.ClassHandler.Invoke(Object proxy, MethodInfo method, Object[]
args)
at WMI.Win32ServicesProxy.Select(String )
at winsw.WrapperService.Run(String[] args)
at winsw.WrapperService.Main(String[] args)
Command create-service failed.
It still created the GlassFishV3122Service.exe and GlassFishV3122Service.xml files for the Windows Service Wrapper in C:\glassfish\3.1.2.2\glassfish\domains\domain1\bin\. All that was missing was registering the exe file as a Windows service. I was able to do this manually with the following command:
C:\glassfish\3.1.2.2\bin>sc create domain1 binPath= "C:\glassfish\3.1.2.2\glassfish\domains\domain1\bin\GlassFishV3122Service.exe" start= auto DisplayName= "domain1 GlassFish"
[SC] CreateService SUCCESS
Notice the space after the = character. I've read that this is important.
The Windows service now works, but the JVM will shut down when you log out of Windows. You need to add the -Xrs JVM option in a couple of places:
1) C:\glassfish\3.1.2.2\glassfish\bin\asadmin.bat Pay close attention to the path. There are multiple copies of asadmin.bat and you need to edit the one referenced by the Windows Service Wrapper XML config file. Add -Xrs to this line:
set JAVA=java -Xrs
2) C:\glassfish\3.1.2.2\glassfish\domains\domain1\config\domain.xml There are two blocks of jvm-options elements. I added the following to both blocks because I'm not sure which is used when:
Ryan de Laplante