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;
}