Bonjour,
J'ai réalisé sous BCB 6 une application qui se connecte à une bdd SQL Server grâce à TADOConnection et jusqu'à présent je n'ai rencontré aucun problème, je parvenais à me connecter à la bdd et à réaliser des requêtes.
J'ai récemment dû modifier mon application pour qu'elle soit exécutée en tant que service. Je ne suis pas tout à fait reparti de zéro, j'ai repris le code principal, et j'ai créé un nouveau projet de type "Expert console", utilisant la VCL, dans lequel j'ai mis le code suivant pour qu'il tourne en tant que service :
Le code principal de mon application fonctionne parfaitement, jusqu'à ce qu'il tombe sur la ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 //--------------------------------------------------------------------------- #include <vcl.h> #include "Windows.h" #include "Winsvc.h" #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused SERVICE_STATUS ServiceStatus; SERVICE_STATUS_HANDLE hServiceStatus; BOOL ServiceStarted=TRUE; void WINAPI ServiceMain(DWORD argc, LPTSTR *argv); void WINAPI ServCtrlHandler(DWORD Opcode); int main() { SERVICE_TABLE_ENTRY Table[] = {{"Service1",ServiceMain},{NULL,NULL}}; StartServiceCtrlDispatcher(Table); return 0; } /******************************************************************************/ void WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv) { ZeroMemory(&ServiceStatus, sizeof(SERVICE_STATUS)); ServiceStatus.dwServiceType = SERVICE_WIN32; ServiceStatus.dwCurrentState = SERVICE_START_PENDING; ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP; hServiceStatus = RegisterServiceCtrlHandler("MonService", ServCtrlHandler); ServiceStatus.dwCurrentState = SERVICE_RUNNING; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 0; SetServiceStatus (hServiceStatus, &ServiceStatus); ServiceStarted=TRUE; while(ServiceStarted) { // ..... le code principal de mon application.... qui contient notamment la connexion avec TADOConnection } } /******************************************************************************/ void WINAPI ServCtrlHandler(DWORD SCCode) { switch(SCCode) { case SERVICE_CONTROL_CONTINUE: ServiceStatus.dwCurrentState = SERVICE_RUNNING; SetServiceStatus (hServiceStatus,&ServiceStatus); return; case SERVICE_CONTROL_PAUSE: ServiceStatus.dwCurrentState = SERVICE_PAUSED; SetServiceStatus (hServiceStatus,&ServiceStatus); return; case SERVICE_CONTROL_STOP: ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwCurrentState = SERVICE_STOPPED; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 0; SetServiceStatus (hServiceStatus,&ServiceStatus); ServiceStarted=FALSE; return; } }
Cela fait planter mon service et l'arrête.
Code : Sélectionner tout - Visualiser dans une fenêtre à part TADOConnection *TADOConnection1 = new TADOConnection(NULL);
Est-ce le "(NULL)" qui ne lui plait pas ?
J'ai tenté de faire executer le service en tant que administrateur, cela ne change rien...
Merci pour votre aide.
Partager