Ragazzi vi prego aiutatemi
E' questo il codice che utilizzo per creare un servizio
Non badate al fatto che in questo caso il servizio non faccia niente di utile
La cosa che non riesco a spiegarmi è che fino alla creazione del servizio va tutto ok
quando lancio il servizio mi esce il messaggio di errore:
"Prova Servizio sarà terminato inviare comunicazione a microsoft.... e via di seguito"
La stessa cosa non si verifica se commento questa porzione di codice
fscanf(fileCfg,"%s",nomeDbDati);
fscanf(fileCfg,"%s",nomeDbCfg);
fclose(fileCfg);
c'è qualcosa che mi sfugge...
anche se facessi solo la fscanf o l'fclose ho problemi
con il solo fopen no
Vi prego aiutatemi sono disperato
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <process.h>
#include <winsock.h>
#include <time.h>
#include "Winsvc.h"
SERVICE_STATUS m_ServiceStatus;
SERVICE_STATUS_HANDLE m_ServiceStatusHandle;
BOOL bRunning=1;
void WINAPI ServiceMain(DWORD argc, LPTSTR *argv);
void WINAPI ServiceCtrlHandler(DWORD Opcode);
BOOL InstallService();
BOOL DeleteService2();
int main(int argc, char* argv[])
{
if(argc>1)
{
printf("%s\n",argv[1]);
if(strcmp(argv[1],"-i")==0)
{
printf("%s\n",argv[1]);
if(InstallService())
printf("\n\nService Installed Sucessfully\n");
else
printf("\n\nError Installing Service\n");
}
if(strcmp(argv[1],"-d")==0)
{
if(DeleteService2())
printf("\n\nService UnInstalled Sucessfully\n");
else
printf("\n\nError UnInstalling Service\n");
}
else
{
printf("\n\nUnknown Switch Usage\n\nFor Install use Srv1 -i\n\nFor UnInstall use Srv1 -d\n");
}
}
else
{
SERVICE_TABLE_ENTRY DispatchTable[]=
{{"Service1",ServiceMain},{NULL,NULL}};
StartServiceCtrlDispatcher(DispatchTable);
}
return 0;
}
void WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
{
m_ServiceStatus.dwServiceType = SERVICE_WIN32;
m_ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
m_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
m_ServiceStatus.dwWin32ExitCode = 0;
m_ServiceStatus.dwServiceSpecificExitCode = 0;
m_ServiceStatus.dwCheckPoint = 0;
m_ServiceStatus.dwWaitHint = 0;
m_ServiceStatusHandle = RegisterServiceCtrlHandler("service6",
ServiceCtrlHandler);
if (m_ServiceStatusHandle == (SERVICE_STATUS_HANDLE)0)
{
return;
}
m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
m_ServiceStatus.dwCheckPoint = 0;
m_ServiceStatus.dwWaitHint = 0;
if (!SetServiceStatus (m_ServiceStatusHandle, &m_ServiceStatus))
{
}
bRunning=1;
while(bRunning)
{
FILE *fileCfg;
char nomeDbDati[500];
char nomeDbCfg[500];
Sleep(3000);
fileCfg=fopen("cfg/db_cfg.ini", "r");//apro il file di configurazione
if(feof(fileCfg)==0)
{
fscanf(fileCfg,"%s",nomeDbDati);
fscanf(fileCfg,"%s",nomeDbCfg);
fclose(fileCfg);
}
}
return;
}
void WINAPI ServiceCtrlHandler(DWORD Opcode)
{
switch(Opcode)
{
case SERVICE_CONTROL_PAUSE:
m_ServiceStatus.dwCurrentState = SERVICE_PAUSED;
break;
case SERVICE_CONTROL_CONTINUE:
m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
break;
case SERVICE_CONTROL_STOP:
m_ServiceStatus.dwWin32ExitCode = 0;
m_ServiceStatus.dwCurrentState = SERVICE_STOPPED;
m_ServiceStatus.dwCheckPoint = 0;
m_ServiceStatus.dwWaitHint = 0;
SetServiceStatus (m_ServiceStatusHandle,&m_ServiceStatus);
bRunning=0;
break;
case SERVICE_CONTROL_INTERROGATE:
break;
}
return;
}
BOOL InstallService()
{
char strDir[1024];
LPCTSTR lpszBinaryPathName;
HANDLE schSCManager,schService;
GetCurrentDirectory(1024,strDir);
printf("%s\n",strDir);
strcat(strDir,"\\provaservizio.exe");
schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if (schSCManager == NULL)
return 0;
lpszBinaryPathName=strDir;
schService = CreateService(schSCManager,"service6",
"service6", // service name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_WIN32_OWN_PROCESS, // service type
SERVICE_DEMAND_START, // start type
SERVICE_ERROR_NORMAL, // error control type
lpszBinaryPathName, // service's binary
NULL, // no load ordering group
NULL, // no tag identifier
NULL, // no dependencies
NULL, // LocalSystem account
NULL); // no password
if (schService == NULL)
return 0;
CloseServiceHandle(schService);
return 1;
}
BOOL DeleteService2()
{
HANDLE schSCManager;
SC_HANDLE hService;
schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if (schSCManager == NULL)
return 0;
hService=OpenService(schSCManager,"service6",SERVICE_ALL_ACCESS);
if (hService == NULL)
return 0;
if(DeleteService(hService)==0)
return 0;
if(CloseServiceHandle(hService)==0)
return 0;
return 1;
}