Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Crear servicios en WXP
Message
General information
Forum:
Visual FoxPro
Category:
COM/DCOM and OLE Automation
Miscellaneous
Thread ID:
00926254
Message ID:
00926661
Views:
14
>Hola Compañeros,
>
>He realizado un programita, pero quiero que para que funcione, verifique si se encuentra iniciado y funcionando perfectamente bien, un servicio, en caso contrario que me mande algún error, el problema es que no se como hacerlo.
>
>- Me gustaria saber como hacer el *servicio* para que recida en memoria.
>- Como verificar que existe en memoria desde mi programa...
>
>Vaya, es similar a los servicios que maneja WINXP o W2K
>
>Si alguien tiene una idea, le agradezco mucho su cooperación.
>
>Gracias
>
>Saludos :)

Si te entiendo bien, creo que puedes usar WMI (ejemplo muy básico de como poner un servicio en pausa, reactivarlo, pararlo o comenzarlo, hay más comandos disponibles) (tampoco creo el código este muy bien, es sólo un ejemplo, aunque anda en VFP 8 y WinXP, no es muy elegante):
Requirements
Client: Included in Windows XP, Windows 2000 Professional, Windows NT Workstation 4.0 SP4 and later.
Server: Included in Windows Server 2003, Windows 2000 Server, Windows NT Server 4.0 SP4 and later.
clear
listServices()
SendCommandToService('Schedule', 'PauseService()')
SendCommandToService('Schedule', 'ResumeService()')
SendCommandToService('Schedule', 'StopService()')
SendCommandToService('Schedule', 'StartService()')

function listServices(tcComputer)
local lcComputer, loWMIService, loOperatingSystem, loOS, lcDateTime, ltDateTime, lnRet

lcComputer	= Iif(Vartype(tcComputer)='C', tcComputer, 'LocalHost')
loWMIService	= GetObject("winmgmts:\\" + lcComputer + "\root\cimv2")
loServices	= loWMIService.ExecQuery("Select * from Win32_Service")
try
	lnCount	= loServices.Count
catch
	lnCount	= 0
endtry
if lnCount > 0
	for each loService in loServices
		with loService
			? .Name, .Caption, .PathName, .State, .StartMode
		endwith
	endfor
endif
return

* To stop, start, pause or resume a service, for example
function SendCommandToService(tcService, tcCommand, tcComputer)
local lcComputer, loWMIService, loOperatingSystem, loOS, lcDateTime, ltDateTime, lnRet

lcComputer	= Iif(Vartype(tcComputer)='C', tcComputer, 'LocalHost')
loWMIService	= GetObject("winmgmts:\\" + lcComputer + "\root\cimv2")
loServices	= loWMIService.ExecQuery("Select * from Win32_Service")

loServices	= loWMIService.ExecQuery("Select * from Win32_Service where name='" + tcService + "'")
try
	lnCount	= loServices.Count
catch
	lnCount	= 0
endtry
if lnCount > 0
	for each loService in loServices
		lnRet	= Evaluate('loService.' + tcCommand)
		if  lnRet = 0
			? 'Successfully executed command: ' + tcCommand + ' to ' + tcService + ' service'
		else
			? 'Fail to execute command: ' + tcCommand + ' to ' + tcService + ' service, Error:', lnRet
		endif
	endfor
else
	? 'Service not found'
endif
Otra cosa, en general yo escribo el código con nombre de computadora remota, ya que al ser administrador de dominio puedo ejecutarlo sin problema, pero, esto no es la norma, así que si sólo vas a correr esto en la máquina local, puedes remover el parámetro tcComputer y usar '.' ó 'localhost' en su defecto, hay otros cambios que pueden ser necesarios si corres VFP6 o si usas Windows NT (creo para NT hay que pasar el valor de "impersonation", en XP así como lo uso toma el default "impersonate", pero si quieres usarlo con NT (2000?) y no te funciona, dime y te paso la sintaxis

Para VFP 6, usa
loLocator            = createObject("wbemScripting.SwbemLocator")
loWMIService         = loLocator.ConnectServer(lcComputer)  && '' o nada para computadora local
en lugar de:
loWMIService	= GetObject("winmgmts:\\" + lcComputer + "\root\cimv2")
< Update >
Doh! (8(|) ahora veo que en el mensaje dices Windows XP, por lo que un monton de lo que dije fue a parar a saco roto :)
< /Update >
"The five senses obstruct or deform the apprehension of reality."
Jorge L. Borges?

"Premature optimization is the root of all evil in programming."
Donald Knuth, repeating C. A. R. Hoare

"To die for a religion is easier than to live it absolutely"
Jorge L. Borges
Previous
Reply
Map
View

Click here to load this message in the networking platform