IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Appelle d'une modale d'un Service windows


Sujet :

Langage Delphi

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 204
    Par défaut Appelle d'une modale d'un Service windows
    Bonjour,

    Je suis sur un service Windows ecrite en delphi.

    La particularité de ce service , c'est un serveur de clé de protection réseau, elle peux afficher sa modale en tant que service Windows.

    J'ai écrit en delphi un mini-appli console qui permet d'appeler (afficher) la modale de ce service, ça à l'air de marcher.

    Je suis connecté en tant qu'utilisateur nommé "admin" non limité.

    Le probléme : c'est quand je me change d'utilisateur sur un utilisateur limitée "limituser" , et que j'execute le mini-appli qui affiche la modale du service , la modale vient finalement s'afficher sur le bureau de l'utilisateur admin (sans être deloguer).

    Code du petit mini-appli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    begin
    he:=OpenEvent(EVENT_ALL_ACCESS,FALSE,'Global\showsc');
      if (he<>0) then begin
      		SetEvent(he);
      		//ExitProcess(1);
      end;
    end.
    Dans le service , c'est un thread qui permet d'afficher la modale :
    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
    function thmodal(p : pointer) : DWORD; stdcall;
    var sd : array[1..SECURITY_DESCRIPTOR_MIN_LENGTH] of byte;
    		sa : TSECURITYATTRIBUTES;
        he : thandle;
        bw : dword;
        app : Tapplication;
    begin
            sa.nLength := sizeof(sa);
    	sa.bInheritHandle := TRUE;
    	sa.lpSecurityDescriptor := @sd;
     
    	InitializeSecurityDescriptor(@sd, SECURITY_DESCRIPTOR_REVISION);
    	SetSecurityDescriptorDacl(@sd, TRUE, nil, FALSE);
     
     
    	he:=CreateEvent(@sa,FALSE,FALSE,'Global\Showsc');
      while (isserviced) do begin
      		bw:=WaitForSingleObject(he,2500);
          if bw=WAIT_OBJECT_0 then begin
              ResetEvent(he);
              app := tapplication.Create(nil);
              App.CreateForm(TPrincipale, Principale);
      				App.CreateForm(Tflog, flog);
      				App.CreateForm(Tfstat, fstat);
      				App.CreateForm(Tfuser, fuser);
              Principale.Showmodal;
              App.Destroy;
     
          end;
     
      end;
      thmodal := 1;
    end;
     
     
    procedure TService_license_server.ServiceStart(Sender: TService; var Started: Boolean);
    var tmp : array[0..512] of char;
        dwid : cardinal;
    begin
         started := true;
         isserviced := true;
     
         CreateThread(nil,0,@thmodal,nil,0,dwid);
    end;
    Comment faire pour que la modale s'affiche ,quelque soit l'utilisateur ?

    Merci

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Déjà, il faut que ton service soit executer par un utilisateur donné, je suppose "admin" et qu'il soit interactif (et qu'il en aie les droits) pour qu'il puisse utilise le bureau !

    Sache que tu vas avoir des soucis avec Seven pour la gestion des services interactifs !

    Comme le service est lancé par "admin", il obtient les droits d'interactivité de l'utilisateur "admin" mais pas de "limituser"

    C'est quand même de la bidouille de créer un autre TApplication de l'unite Forms en plus de du TApplicationService déjà existant !

    Personnellement, je n'utilise jamais de fenêtre dans un service !
    Quelques fois, j'a été obligé d'utiliser le mode interactif pour effectuer un ShellExecute d'une appli tierce fournie par un autre prestataire.

    Je prefère avoir deux exéctuables, l'un pour le service et un second, en général, c'est un notifyIcon qui affiche les différentes fenêtres et discute avec le service souvent TCP\IP, cela permet d'administrer le service à distance.
    Si je sais que cela restera en local, je vais tenter un FileMapping avec sémaphore,
    Je n'ai pas encore essayé un ActiveX en RegisterActiveObjet dans un Service mais cela doit aussi être interessant à tester
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Appel d'une méthode d'un service Windows.
    Par sitirna dans le forum Services Windows
    Réponses: 9
    Dernier message: 11/08/2010, 11h48
  2. Mettre une application access en service windows
    Par stolx_10 dans le forum Access
    Réponses: 7
    Dernier message: 17/10/2006, 11h16
  3. intégrer une appli VB6 en service windows
    Par manupatia dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/07/2006, 15h27
  4. Mettre une application access en service windows.
    Par chris_magic dans le forum Access
    Réponses: 11
    Dernier message: 11/07/2006, 15h50
  5. Réponses: 4
    Dernier message: 19/06/2006, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo