我知道当我尝试创建新的MessageQueue
时,如果未启用消息队列,系统将抛出InvalidOperationException
。
但是如何知道以编程方式是否在计算机上启用了消息队列? 我正在使用C#2.0& C#4.0有两个不同的代码库。
答案 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实例,您可以将其丢弃,因为您只使用它来检测支持)