Question

J'utilise VB6 et j'utilise ADSI pour demander l'état (en cours d'exécution ou non) d'un service Windows.Consultez cet article MS: http://msdn.microsoft.com / fr-fr / library / aa746322 (v= vs.85) .aspx .

Avec un utilisateur membre du groupe USERS, je reçois une exception levée.Je crois que c'est sur la méthode GetObject:

Set comp = GetObject("WinNT://.,Computer")

L'exception est: 80070005 "Erreur d'accès général refusé"

L'exécution du même code en tant que membre de POWER USERS fonctionne cependant très bien.

Élever tous les utilisateurs au rang d'utilisateurs avancés n'est pas une option.Quels droits exacts dois-je avoir accordés pour que cette fonction s'exécute correctement?

J'ai essayé d'exécuter procmon.exe, et je n'ai pas été en mesure de déterminer à partir de la sortie où ou quoi un refus se produit.

Merci!

Modifier: Ceci fonctionne sur XP sp2.

Était-ce utile?

La solution

On dirait que vous rencontrez une barrière UAC.Je ne suis pas familier avec IADsService, mais il n'est guère nécessaire pour déterminer si un service Windows est en cours d'exécution.Avez-vous envisagé d'utiliser les fonctions API pour interroger votre service?Essayez QueryServiceStatus sur un service ouvert avecSERVICE_QUERY_STATUS.

Autres conseils

Il n'y a pas besoin de services administratifs lourds ni d'appels d'API.L'interface Shell Automation propose cela depuis un certain temps (Win2K ou version ultérieure, Shell32.dll v. 5.0 ou version ultérieure):

With CreateObject("Shell.Application")
    MsgBox .IsServiceRunning("MSMQ")
End With

Fonctionne bien pour moi sans élévation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top