Как узнать программно, включена ли очередь сообщений на компьютере или нет?
Я знаю, что когда я пытаюсь создать новый 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
Ответ 3
Как определить установлен ли MSMQ
Ответ 4
Вы ответили на свой собственный вопрос: попробуйте создать новый MessageQueue и поймайте InvalidOperationException.
Если вы не получите исключения, MQ включен; если вы получаете исключение, оно не включено. (вы можете избавиться от этого экземпляра MessageQueue, если он был создан, поскольку вы использовали его только для обнаружения поддержки)