Как узнать программно, включена ли очередь сообщений на компьютере или нет?

Я знаю, что когда я пытаюсь создать новый MessageQueue, система бросает InvalidOperationException, если очередь сообщений не включена.

Но как узнать программно, включена ли очередь сообщений на компьютере или нет? Я использую С# 2.0 и С# 4.0 в двух разных базовых кодах.

Ответ 1

Вы можете использовать System.ServiceProcess для этого, но сначала вам нужно добавить ссылку на свой проект Service.ServiceProcess, и вы можете получить все службы и получить их статус следующим образом:

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? }

Ответ 2

Ответ немного запоздалый, но если вы используете сценарий, то Powershell вам поможет. Чтобы получить обновление статуса по номерам, используйте следующие script:

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

Это покажет вам имя очереди и количество элементов в каждой очереди. Надеюсь, это когда-нибудь поможет кому-нибудь.: D

Ответ 4

Вы ответили на свой собственный вопрос: попробуйте создать новый MessageQueue и поймайте InvalidOperationException.

Если вы не получите исключения, MQ включен; если вы получаете исключение, оно не включено. (вы можете избавиться от этого экземпляра MessageQueue, если он был создан, поскольку вы использовали его только для обнаружения поддержки)