如何以编程方式知道计算机上是否启用了消息队列?

时间:2011-05-20 07:58:52

标签: c# .net msmq

我知道当我尝试创建新的MessageQueue时,如果未启用消息队列,系统将抛出InvalidOperationException

但是如何知道以编程方式是否在计算机上启用了消息队列? 我正在使用C#2.0& C#4.0有两个不同的代码库。

4 个答案:

答案 0 :(得分:18)

您可以将 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? }

答案 1 :(得分:2)

稍微回答,但如果你是脚本粉丝Powershell是你的帮助。 要获取有关数字的状态更新,请使用以下脚本:

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

这将显示队列名称和每个队列中的项目数。希望有一天这会有所帮助。 :d

答案 2 :(得分:1)

答案 3 :(得分:-1)

你已经回答了自己的问题:尝试创建一个新的MessageQueue,并捕获InvalidOperationException。

如果没有异常,则启用MQ;如果你得到一个例外,它没有启用。 (如果创建了一个MessageQueue实例,您可以将其丢弃,因为您只使用它来检测支持)