Revision ee345c39
Added by Hamish Coleman about 15 years ago
- ID ee345c394eb78c5ba96b8514ba0dfaf318ba85b9
| svctest.c | ||
|---|---|---|
|
return 1;
|
||
|
}
|
||
|
|
||
|
char **env = environ;
|
||
|
while(*env) {
|
||
|
dprintf(1,"%s:%i: env==%s\n",__FILE__,__LINE__,*env);
|
||
|
env++;
|
||
|
}
|
||
|
|
||
|
dprintf(1,"%s:%i: getenv(USERNAME)==%s\n",__FILE__,__LINE__,getenv("USERNAME"));
|
||
|
|
||
|
char buf[100];
|
||
|
int res = GetConsoleTitle(&buf,sizeof(buf));
|
||
|
dprintf(1,"%s:%i: GetConsoleTitle()==%i, %s\n",__FILE__,__LINE__,
|
||
|
res,buf);
|
||
|
trace("return 0");
|
||
|
return 0;
|
||
|
}
|
||
| win-scm.c | ||
|---|---|---|
|
|
||
|
global_sd = sd;
|
||
|
|
||
|
#if 0
|
||
|
/* turns out to be untrue! */
|
||
|
/* If we have commandline args, then we cannot have been started
|
||
|
* by the Windows SCM
|
||
|
/*
|
||
|
* Attempt to detect if we have been run from an interactive session.
|
||
|
* checking the environ is still not perfect, since if the
|
||
|
* service is set to login as a user, it gets a USERNAME env
|
||
|
* and if that user is currently logged in interactively, it
|
||
|
* gets a SESSIONNAME env :-(
|
||
|
* So, also check if there is a console window
|
||
|
*
|
||
|
* Other avenues of investigation:
|
||
|
* from http://bytes.com/topic/net/answers/124885-multiple-use-exe-determine-if-running-service
|
||
|
* - work out how System.Environment.UserInteractive works
|
||
|
* - Check if parent process name is "services.exe"
|
||
|
* from http://stackoverflow.com/questions/200163/am-i-running-as-a-service#200183
|
||
|
*/
|
||
|
if (argc>1) {
|
||
|
char buf[100];
|
||
|
if (getenv("USERNAME") && getenv("SESSIONNAME")
|
||
|
&& GetConsoleTitle(&buf,sizeof(buf))) {
|
||
|
return SCM_Start_Console(sd);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
/* try to run as a service */
|
||
|
/*
|
||
|
* Note, this will eventually fail if we are not started as a service
|
||
|
* however, it will take an noticably long time to do so, thus we
|
||
|
* try to short circuit this delay above.
|
||
|
*/
|
||
|
if (StartServiceCtrlDispatcher(ServiceTable)==0) {
|
||
|
int err = GetLastError();
|
||
|
|
||
Also available in: Unified diff
Update win-scm service detection from the svctest results