2009-04-23 5 views
25

Sur une machine XP, une file d'attente de messages privée a été créée par un service .net. Lorsque je veux accéder à cette file d'attente privée dans une application VB6, j'obtiens toujours une erreur «Accès refusé». Donc, il semble que ce soit un problème de sécurité, seulement je ne comprends pas pourquoi même lorsque je suis connecté en tant qu'administrateur, je n'ai toujours pas accès à la file d'attente qui a été créée sur le même ordinateur. Y a-t-il autre chose à prendre en compte?Aucune autorisation d'accès à un MSMQ privé

Exemple sur la façon dont j'utilise la file d'attente dans VB6

Public msgQueue As MSMQQueue 

Private Sub OpenQueue() 

    Dim MQ As New MSMQQueueInfo 
     MQ .PathName = ".\Private$\incommingQueue" 

    Set msgQueue = MQ.Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE) 

End Sub 
+0

Avez-vous vérifié la sécurité de la file d'attente? Les ACL sont dans les propriétés de la file d'attente et ressemblent à des propriétés de dossier. –

+0

Si j'essaie de modifier les propriétés de la file d'attente, je reçois simplement le même message "accès refusé". – Mez

Répondre

52

Cela peut se produire si le service .NET supprimé le groupe « Tout le monde » des autorisations de la file d'attente privée. Voici quelques mesures que vous pouvez prendre pour résoudre ce:

  1. Arrêtez le service MSMQ

  2. Ouvrez le dossier C:\WINDOWS\system32\msmq\storage\lqs

  3. Trouver le fichier dans ce dossier qui décrit votre file d'attente - (incommingQueue

  4. En utilisant le bloc-notes, ouvrez le fichier lqs pour une autre file d'attente privée disposant de bonnes autorisations de sécurité. (Si vous n'avez pas d'autres files d'attente privées créer un)

  5. Localisez la ligne dans le fichier qui commence Security=....

  6. Copiez la ligne entière à votre presse-papiers (attention pour Word Wrap, cette ligne être assez long)

  7. Ouvrez le fichier lqs pour votre file d'attente de problème dans votre éditeur de texte

  8. Ecraser la ligne Security=... dans ce fichier avec le contenu de votre presse-papiers

  9. Enregistrez le fichier lqs modifié

  10. Démarrez le service MSMQ

Vous devriez trouver que la file d'attente de problème a maintenant les mêmes autorisations que la file d'attente dont les paramètres de sécurité que vous avez copié à l'étape 6 ci-dessus.

+1

Cela ressemble à un hack horrible. * Sûrement * cela peut être fait à travers les propriétés de la file d'attente, comme décrit dans la réponse ci-dessous. https://stackoverflow.com/a/3138438/1158692 –

26

La solution affichée ici semble un peu un hack. Peut-être que cela est nécessaire pour Windows XP. J'ai rencontré quelque chose de similaire en utilisant Windows 7 et utilisé une approche différente pour résoudre ce problème.

Situation:

  • programme se compose du code C# qui crée une file d'attente est exécuté transactionnel privé
  • programme en tant que service Windows, en cours d'exécution sur le compte du système local.
  • Lorsque le service est exécuté, la file d'attente privée est créée avec le compte système local en tant que propriétaire.
  • Même si je suis administrateur, je ne peux pas inspecter les messages de la file d'attente.

Solution (ce qui est pour Windows 7):

  1. Run compmgmt.msc
  2. ouverts 'Services et applications de
  3. Ouvrir Message du Queues de
  4. ouvert 'Queues privé'
  5. Cliquez avec le bouton droit sur la file d'attente nouvellement créée
  6. Cliquez sur 'Propriétés'
  7. Sélectionnez l'onglet 'Sécurité'
  8. Cliquez
  9. Sélectionnez l'onglet 'propriétaire' 'avancée'
  10. Sélectionnez 'Administrateur'
  11. l'onglet Sélectionnez 'autorisations
  12. Cliquez sur 'Ajouter'
  13. type au nom de votre compte (par exemple 'Administrateur')
  14. Cliquez sur 'OK'
  15. 'Vérifier les noms' Cliquez sur 'OK'
  16. Cliquez sur 'OK'

Maintenant, vous pouvez accéder aux messages dans la file d'attente et aussi purger la file d'attente si vous le souhaitez.

+0

J'ai vérifié que cette méthode fonctionne sur Windows Server 2003. Excellent travail. Cette autre solution a vraiment l'air d'être un hack, et celui-ci est beaucoup plus facile à accomplir. – Jason

+0

Je devais cliquer sur la case à cocher "Contrôle total" entre les étapes 15 et 16, mais à part cela, oui cela a fonctionné sur mon ordinateur Windows 7, et beaucoup moins d'un hack que l'autre solution. –

+2

Cela ne fonctionne pas lorsque la file d'attente est créée par un service Windows car l'accès à la file d'attente est refusé, ce qui correspond exactement à la situation décrite dans la question d'origine. – user379429