SoloCodigo
Programación General => C/C++ => C++ Builder => Mensaje iniciado por: afiler en Jueves 12 de Octubre de 2006, 22:10
-
Hola , como puedo desde C++ , invocar un servicio windows y manipularlo como objeto para poder acceder a los metodos que posea este servicio.
si alguien cacha.... por fa
-
http://msdn.microsoft.com/library/en-us/dl...se/services.asp (http://msdn.microsoft.com/library/en-us/dllproc/base/services.asp)
-
http://msdn.microsoft.com/library/en-us/dl...se/services.asp (http://msdn.microsoft.com/library/en-us/dllproc/base/services.asp)
Idol, estuve viendo la información , lo que me podria servir es el
openService que devuelve el Handle , pero este es solo una cabecera al servicio.
Lo que requiero es invocar al servicio mediante alguna funcion que me devuelva un Object y luego llamar a un metodo especifico de este.
Objec.metodoXXXXX()
-
Muy bien pero .. ¿Donde dice que un servicio es un objeto? Eso no es cierto ... se pueden escribir servicios en assembly o en C perfectamente.
-
Muy bien pero .. ¿Donde dice que un servicio es un objeto? Eso no es cierto ... se pueden escribir servicios en assembly o en C perfectamente.
Solo cite "objetos" para explicar lo que necesito, pero bueno , finalmente al invocar un servicio con openService obtengo un handler el cual me retorna la estructura del servicio, la duda ahora es como acceder a un metodo o funcion X de este servicio windows.
POr si acaso este servicio que señalo es un .exe que al ejecutarlo queda corriendo como un servicio win. el cual posee un metodo que al pasarle ciertos parametros
este retorna un valor encriptado.
-
Solo cite "objetos" para explicar lo que necesito, pero bueno , finalmente al invocar un servicio con openService obtengo un handler el cual me retorna la estructura del servicio, la duda ahora es como acceder a un metodo o funcion X de este servicio windows.
Bien pero es mejor tratar de ser exactos, sino generas confusion y es mas dificil que se te pueda ayudar. Por ir al caso, tampoco es cierto que OpenService te devuelva ninguna estructura del servicio en lo absoluto. Si s cierto que te devuelve un HANDLE y con el mismo podes hacer varias cosas. Supongo que lo que estas buscando es ControlService que sirve tanto para las funciones comunes (stop, pause, etc) como para las definidas por el servicio en particular.
-
Hola , revise el ControlService, pero vi que solo retorna informacion del servicio, este es el codigo que utilice:
void ControlService(SC_HANDLE schService) {
SERVICE_STATUS ssStatus;
DWORD fdwAccess;
DWORD dwStartTickCount, dwWaitTime;
fdwAccess = SERVICE_USER_DEFINED_CONTROL
if (! ControlService(
schService, // handle to service
129, // control value to send, este numero va de 128 a 256
&ssStatus) ) // address of status info
{
printf("ControlService failed (%d)\n", GetLastError());
// return FALSE;
}
printf("\nStatus of Sample_Srv: \n");
printf(" Service Type: 0x%x\n", ssStatus.dwServiceType);
printf(" Current State: 0x%x\n", ssStatus.dwCurrentState);
printf(" Controls Accepted: 0x%x\n",
ssStatus.dwControlsAccepted);
printf(" Exit Code: %d\n", ssStatus.dwWin32ExitCode);
printf(" Service Specific Exit Code: %d\n",
ssStatus.dwServiceSpecificExitCode);
printf(" Check Point: %d\n", ssStatus.dwCheckPoint);
printf(" Wait Hint: %d\n", ssStatus.dwWaitHint);
}
Bueno antes me cree un open service para pasarle al Controlservice el SC_HANDLE
Y la verdad no se como poder invocar un metodo en particular del servicio.
-
Hola , revise el ControlService, pero vi que solo retorna informacion del servicio, este es el codigo que utilice:
Y la verdad no se como poder invocar un metodo en particular del servicio.
Viste mal, lee la documentacion de la funcion. Con la misma podes como ya te dije antes parar, pausar, resumir un servicio y usar las funciones especificas del mismo.
¿Quien dice que ese servicio tiene el metodo que decis exportado de esta manera? ¿Donde esta su documentacion?
-
A vale lo que pasa es que es un servicio hecho de tipo COM, en la docu. me dicen que se debe invocar al metodo DLC040, y me enviaron un ejemplo en Visual Basic donde
referencian el servicio como libreria
Dim cripto As New Seg
y luego
cripto.DLC040(parametros xxxxxxxx)
"Seg" es la clase que corresponde al servicio. eso es lo que tengo de documentacion.
-
COM es otra historia totalmente diferente a los servicios de Windows. Mi recomendacion es que les pidas o un ejemplo para Builder de esto mismo o de ser posible una interfaz mas simple de usar desde C/C++ (como una DLL) ...