2009-04-23 15 views
25

En una máquina XP, hay una cola de mensajes privada creada por un servicio .net. Cuando quiero acceder a esta cola privada en una aplicación VB6 sigo obteniendo un error de "Acceso denegado". Parece que esto es un problema de seguridad, solo que no entiendo por qué incluso cuando estoy conectado como administrador sigo sin tener acceso a la cola que se creó en la misma máquina. ¿Hay algo más que deba tener en cuenta?Sin permiso para acceder a un MSMQ privado

muestra sobre cómo utilizar la cola en 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

¿Ha comprobado la seguridad de la cola? Las ACL están en las propiedades de la cola y se parecen a las propiedades de la carpeta. –

+0

Si trato de modificar las propiedades de la cola, solo recibo el mismo mensaje "acceso denegado". – Mez

Respuesta

52

Esto puede ocurrir si el servicio .NET elimina el grupo "Todos" de los permisos de la cola privada. Aquí hay algunos pasos que puede tomar para resolver este:

  1. detener el servicio de MSMQ

  2. Abrir la carpeta C:\WINDOWS\system32\msmq\storage\lqs

  3. Encuentra el archivo en esta carpeta que describe su cola - (incommingQueue)

  4. Usando el bloc de notas, abra el archivo lqs para alguna otra cola privada que tenga buenos permisos de seguridad. (Si usted no tiene ningún otro colas privadas crear uno)

  5. Localice la línea en el archivo que comienza Security=....

  6. Copia toda la línea en el portapapeles (cuidado con ajuste de línea, esta línea ser bastante largo)

  7. Abrir el archivo LQS de la cola de un problema en el editor de texto

  8. sobrescribir la línea de Security=... en este archivo con el contenido del portapapeles

  9. presentar
  10. Guarde los LQS modificados

  11. de inicio del servicio MSMQ

Usted debe encontrar que la cola problema ahora tiene los mismos permisos que la cola cuya configuración de seguridad que copió en el paso 6 anterior.

+1

Esto suena como un hack horrendo. * Seguramente * se puede hacer a través de las propiedades de la cola, como se describe en la respuesta a continuación. https://stackoverflow.com/a/3138438/1158692 –

26

La solución publicada aquí parece un poco hack. Quizás esto es necesario para Windows XP. Me encontré con algo similar con Windows 7 y utilicé un enfoque diferente para resolver esto.

Situación:

  • Programa consiste en C# código que crea una cola transaccional privada
  • programa se ejecuta como un servicio de Windows, que se ejecuta en la cuenta del sistema local.
  • Cuando se ejecuta el servicio, la cola privada se crea con la cuenta del sistema local como propietario.
  • Aunque soy administrador, no puedo inspeccionar los mensajes de la cola.

solución (esto es para Windows 7):

  1. Run compmgmt.msc
  2. 'Servicios y Aplicaciones' abierto 'Colas privadas'
  3. abierto 'colas de mensajes'
  4. Abiertas
  5. Haga clic con el botón derecho en la cola recién creada
  6. Haga clic en 'Propiedades'
  7. Seleccione la pestaña 'Seguridad'
  8. Haga clic en 'Opciones avanzadas'
  9. Seleccione la pestaña 'propietario'
  10. Seleccione 'administrador' pestaña
  11. Seleccione 'Permisos'
  12. Haga clic en 'Añadir'
  13. Tipo en nombre de su cuenta (ej. 'Administrador')
  14. Haga clic en 'Comprobar nombres'
  15. Haga clic en 'Aceptar'
  16. Haga clic en 'Aceptar'
  17. Haga clic en 'Aceptar'

Ahora se puede acceder a los mensajes en la cola y también purgue la cola si le gustaría.

+0

He verificado que este método funciona en Windows Server 2003. Buen trabajo. Ese otro arreglo realmente parecía un truco, y este es mucho más fácil de lograr. – Jason

+0

Tuve que hacer clic en la casilla de verificación "Control total" entre los pasos 15 y 16, pero aparte de eso, sí, esto funcionó en mi máquina con Windows 7, y es mucho menos un truco que la otra solución. –

+2

Esto no funciona cuando la cola es creada por un servicio de Windows ya que se niega el acceso a la cola, que es exactamente la situación descrita en la pregunta original. – user379429

Cuestiones relacionadas