2014-02-15 23:03 GMT+04:00 Konstantin Preißer <kpreis...@apache.org>:
> Hi,
>
>> -----Original Message-----
>> From: Konstantin Kolinko [mailto:knst.koli...@gmail.com]
>> Sent: Saturday, February 15, 2014 6:50 PM
>> To: Tomcat Developers List
>> Subject: Re: svn commit: r1567742 - /tomcat/tc7.0.x/trunk/bin/service.bat
>>
>> 2014-02-12 23:50 GMT+04:00  <ma...@apache.org>:
>> > Author: markt
>> > Date: Wed Feb 12 19:50:29 2014
>> > New Revision: 1567742
>> >
>> > URL: http://svn.apache.org/r1567742
>> > Log:
>> > Fix a secondary issue identified in
>> https://issues.apache.org/bugzilla/show_bug.cgi?id=56079
>> > Install the service with a single call to the .exe rather than three calls.
>> >
>>
>> Major:
>> ---------
>> service.bat install  is broken by this change on Windows 7.
>>
>> The symptom is that none of "PR_" variables set to pass classpath, jvm
>> etc. to  Tomcat7.exe
>> appear to have any effect.
>>
>> It is odd. I suspect that it might be a bug in commons daemon procrun.
>
>
> Hmm, I think the problem here is another one. Actually, I think this change 
> didn't break service.bat. When opening a cmd.exe as administrator and use 
> "service install", it still works with 8.0.4 and 7.0.52.
>
> I think the problem is, that when a process is elevated by UAC (from normal 
> user-rights to admin-rights), the environment variables of the parent process 
> are lost. My guess would be that the process cannot be a "real" child process 
> of the parent when it has different access rights so it cannot inherit the 
> environment variables (although SysInternals Process Explorer still shows the 
> process as child of cmd.exe).
>
> I verified this by creating a simple C# application that outputs an 
> environment variable:
>
>             Console.WriteLine("%TEST%: " + 
> Environment.GetEnvironmentVariable("TEST"));
>             Console.WriteLine("%ComSpec%: " + 
> Environment.GetEnvironmentVariable("ComSpec"));
>
> When changing the app's manifest so that it requires administrative access:
>     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
> Then when starting this .exe from cmd.exe, environment variables set in 
> cmd.exe ("TEST", "ComSpec") were lost.
>
> The problem happens also with earlier versions of Tomcat, when running 
> service.bat from an non-elevated cmd.exe and then clicking "Yes" on the UAC 
> dialog. (E.g., the service in the service explorer then shows "Tomcat8" 
> instead of "Apache Tomcat 8").
> Unfortunately, when writing the comment for bug 56079, I did not check if the 
> service is installed correctly, but only check for the message displayed in 
> the console like "The service Tomcat7 has been installed successfully", so I 
> did not notice the problem.
>
> I think currently the only way to correctly install Tomcat as a service when 
> using service.bat is to run cmd.exe as administrator.
>
Thank you.
You are right.

If I create a batch file like the following:
[[[
D:
cd \temp.2014-02-15\apache-tomcat-7.0.52\bin
set "JAVA_HOME=C:\Program Files (x86)\Java\jdk1.7.0_51"
call service.bat install
pause
]]]

and use "Launch as administrator" on it in Explorer,  the service is
installed successfully,

(With exception stdoutput/stderror settings. Those remain as empty.
The service starts successfully, but stdout/stderr are not caught to a
file).

So this did not work earlier either. The only regression in 7.0.52 is
stderr/stdout one.
There were several reports on users@. This explains it.

I'll add this to Bugzilla.

> If it is possible to provide the values as arguments instead of environment 
> variables, then I think it should work when running service.bat from a 
> non-elevated cmd.exe

Agreed.

Best regards,
Konstantin Kolinko

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to