Bonjour, j'ai cr�e un service qui utilise OLE/DCOM/COM+, celui-ci fonctionne parfaitement sous windows XP (lancement au d�marage, fonctionnement), mais sous windows server 2003, le service ne se lance m�me pas, et laisse une erreur au d�marrage comme quoi un service n'a pas pu demarrer et sous une session il m'indique un timeout.
L'ancienne version n'utilise pas d'objet type OLE ou DCOM et marche tr�s bien sous les deux windows.
Depuis une mise a jour de builder 2009, j'ai droit a ce petit message en commentaire quand je cr�e un service:
Project1.cpp
Unit1.cpp
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 #include <SysUtils.hpp> #include <SvcMgr.hpp> #pragma hdrstop #define Application Svcmgr::Application USEFORM("Unit1.cpp", Service1); /* TService: File Type */ //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { /*Le commentaire qui indique comment regler mon probleme*/ // Windows 2003 Server requiert que StartServiceCtrlDispatcher soit // appelée avant CoRegisterClassObject, qui peut être appelée indirectement // par Application->Initialize. TServiceApplication->DelayInitialize permet à // Application->Initialize d'être appelée depuis TService->Main (après que // StartServiceCtrlDispatcher ait été appelée). // // L'initialisation différée de l'objet Application peut affecter // les événements qui surviennent alors avant l'initialisation, comme // TService->OnCreate. Ceci est seulement recommandé si ServiceApplication // enregistre un objet classe avec OLE et est destinée pour une // utilisation avec Windows 2003 Server. // // Application->DelayInitialize = true; // if ((!Application->DelayInitialize) || (Application->Installing())) { Application->Initialize(); } Application->CreateForm(__classid(TService1), &Service1); Application->Run(); } catch (Exception &exception) { Sysutils::ShowException(&exception, System::ExceptAddr()); } catch(...) { try { throw Exception(""); } catch(Exception &exception) { Sysutils::ShowException(&exception, System::ExceptAddr()); } } return 0; }
Unit1.h
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 //--------------------------------------------------------------------------- #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TService1 *Service1; //--------------------------------------------------------------------------- __fastcall TService1::TService1(TComponent* Owner) : TService(Owner) { } TServiceController __fastcall TService1::GetServiceController(void) { return (TServiceController) ServiceController; } void __stdcall ServiceController(unsigned CtrlCode) { Service1->Controller(CtrlCode); } //---------------------------------------------------------------------------
Voila, maintenant je voudrais savoir quelles sont les modification a ajouter pour mettre les dites fonctions pr�sent�es en commentaire, sachant que je ne trouve pas de solution dans google et dans les forums embarcadero c'est un bordel total pour s'y retrouver.
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 //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <SysUtils.hpp> #include <Classes.hpp> #include <SvcMgr.hpp> #include <vcl.h> //--------------------------------------------------------------------------- class TService1 : public TService { __published: // Composants gérés par l'EDI private: // Déclarations de l'utilisateur public: // Déclarations de l'utilisateur __fastcall TService1(TComponent* Owner); TServiceController __fastcall GetServiceController(void); friend void __stdcall ServiceController(unsigned CtrlCode); }; //--------------------------------------------------------------------------- extern PACKAGE TService1 *Service1; //--------------------------------------------------------------------------- #endif
Merci de votre aide, si minime soit t'elle
Partager