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

Windows Forms Discussion :

[SERVICE windows] Démarrer avec droit


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 469
    Points : 167
    Points
    167
    Par défaut [SERVICE windows] Démarrer avec droit
    Salut,

    j'ai un programme en csharp pour démarrer et arrêter un service windows. Le problème c'est que suivant les droits utilisateurs je ne peux pas arrêter / démarrer ce service.

    Avez vous des infos la dessus ? des exemples ?

    Merci à tous

    A ++

  2. #2
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    Salut,

    Tu dois utiliser l'impersonation pour donner les privileges necessaires a l'utilisateur lambda afin qu'il puisse acceder au service. Pour cela tu peux utiliser le code suivant pour creer une classe qui te permettra d'effectuer l'impersonation :

    (desole le code est en vb, mais tu peux utiliser un convertisseur c#)

    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
    Imports System.Security.Principal
    Imports System.Runtime.InteropServices
     
    Public Class ImpersonationUtil
      Public Shared Function Impersonate(ByVal logon As String, ByVal password As String, ByVal domain As String) As Boolean
        Dim tempWindowsIdentity As WindowsIdentity
        Dim token As IntPtr = IntPtr.Zero
        Dim tokenDuplicate = IntPtr.Zero
     
        If LogonUser(logon, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, token) <> 0 Then
          If DuplicateToken(token, 2, tokenDuplicate) <> 0 Then
            tempWindowsIdentity = New WindowsIdentity(CType(tokenDuplicate, IntPtr))
            impersonationContext = tempWindowsIdentity.Impersonate
     
            If impersonationContext IsNot Nothing Then Return True
          End If
        End If
        Return False
      End Function
     
      Public Shared Sub UnImpersonate()
        If impersonationContext IsNot Nothing Then impersonationContext.Undo()
      End Sub
     
      <DllImport("advapi32.dll", CharSet:=CharSet.Unicode)> _
      Public Shared Function LogonUser(ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassord As String, ByVal dwLogonType As Integer, ByVal dwLogonProvider As Integer, ByRef phToken As IntPtr) As Integer
      End Function
     
      <DllImport("advapi32.dll", CharSet:=CharSet.Auto, setlasterror:=True)> _
      Public Shared Function DuplicateToken(ByVal hToken As IntPtr, ByVal impersonationLevel As Integer, ByRef hNewToken As IntPtr) As Integer
      End Function
     
      Private Const LOGON32_LOGON_INTERACTIVE As Integer = 2
      Private Const LOGON32_LOGON_NETWORK_CLEARTEXT As Integer = 4
      Private Const LOGON32_PROVIDER_DEFAULT As Integer = 0
      Private Shared impersonationContext As WindowsImpersonationContext
     
     
     
    End Class
    Ensuite tu l'utilises comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ImpersonationUtil.Impersonate("Username", "Password", "Domain")
    Lorsque l'utilisateur a termine d'utiliser le service n'oublie pas d'arreter l'impersonation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ImpersonationUtil.UnImpersonate()
    Voila

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 469
    Points : 167
    Points
    167
    Par défaut
    Merci pour ta réponse,
    je vais regarder tout ceci.

    Juste un détail encore: les paramètres ("Username", "Password", "Domain") sont stockés dans un fichier ini de config alors ?
    ce qui voudrait dire que tout le monde peut les lire ?

    Merci

  4. #4
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    Ils peuvent etre stockes ou tu veux, pas forcement dans un fichier. Personnellement je les ais mis dans le code car ils ne changeront jamais (bon c'est pas super conseille non plus..).

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 469
    Points : 167
    Points
    167
    Par défaut
    Encore une petite question, je sais je suis chiant

    La dll advapi32.dll que tu importes, elle est présente partout ? C'est quoi au juste ?

    merci

  6. #6
    Membre confirmé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Points : 610
    Points
    610
    Par défaut
    bonsoir
    c'est une bibliothèque qui sert pour les appels de service, registre, accès ,sécurité....

Discussions similaires

  1. Services Windows à démarrer ?
    Par ghohm dans le forum Administration
    Réponses: 2
    Dernier message: 11/05/2012, 23h00
  2. Service Windows : problème avec état du service
    Par dlayla4 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 23/05/2008, 09h35
  3. [2003 serveur] Lancer un service par gpo avec droit utilisateur
    Par falken59140 dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 30/01/2008, 16h14
  4. Service windows + démarrer un exe
    Par Dokho1000 dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 25/03/2007, 13h41
  5. Démarrer et arrêter un service windows
    Par dvarrel dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 28/05/2005, 22h02

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