2011-05-20 10 views
10

Sé que cuando intento crear un nuevo MessageQueue, el sistema arroja InvalidOperationException si Message Queue Server no está habilitado.¿Cómo saber programaticamente si Message Queue Server está habilitado en la máquina o no?

Pero, ¿cómo saber programáticamente si Message Queue Server está habilitado en la máquina o no? Estoy usando C# 2.0 & C# 4.0 en dos bases de código diferentes.

+0

Si lo necesitas respondido a su pregunta, acaba de tratar este tratar { // crear o abrir un MessageQueue } captura (InvalidOperationException) {// no está habilitado } – Vimvq1987

+0

El uso de excepciones para detectar el estado/la información es una mala práctica a menos que sea absolutamente necesario. – Travis

Respuesta

17

Puede usar el System.ServiceProcess para este, pero primero debe agregar una referencia a su proyectar la Service.ServiceProcess, y se puede recuperar todos los servicios y obtener su estado como esto:

List<ServiceController> services = ServiceController.GetServices().ToList(); 
ServiceController msQue = services.Find(o => o.ServiceName == "MSMQ"); 
if (msQue != null) { 
    if (msQue.Status == ServiceControllerStatus.Running) { 
     // It is running. 
    } 
} else { // Not installed? } 
+0

¡Excelente! Aceptando como la respuesta. Se modificó el nombre exacto del servicio MSMQ que el sistema operativo ejecuta cuando se instala MSMQ. El 'ServiceName' es' MSMQ' en Windows 7 y Windows XP al menos. – Learner

+0

¡Genial! Tener una buena. –

-1

Ha respondido su propia pregunta allí: intente crear una nueva MessageQueue y capture InvalidOperationException.

Si no obtiene una excepción, MQ está habilitado; si obtienes una excepción, no está habilitada. (Puede deshacerse de esa instancia de MessageQueue si se creó, ya que solo la utilizó para detectar compatibilidad)

2

Responder a poco tarde, pero si usted está scripting ventilador Powershell está a su ayuda. Para obtener la actualización de estado de los números, el uso siguiente secuencia de comandos:

$queues = Get-WmiObject Win32_PerfFormattedData_msmq_MSMQQueue 
$queues | ft -property Name,MessagesInQueue 

Esto le mostrará el nombre de la cola y el número de elementos en cada cola. Espero que esto ayude a alguien algún día. : D

+0

Gracias por la respuesta .. Pero la pregunta era claramente por C# si ves las etiquetas ... :) – Learner

+0

¡Uy! no prestaron atención, pero ahora Powershell está tan estrechamente entretejido en el framework .net que puede invocarse de forma nativa. #Solo digo –

Cuestiones relacionadas