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
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.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
//---------------------------------------------------------------------------
#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);
}
//---------------------------------------------------------------------------
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
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
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.
Merci de votre aide, si minime soit t'elle