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

C# 如何以编程方式知道机器上是否启用了消息队列?,c#,.net,msmq,C#,.net,Msmq,我知道,当我尝试创建新的MessageQueue时,如果消息队列未启用,系统将抛出invalidoOperationException 但是如何以编程方式知道机器上是否启用了消息队列? 我在两个不同的代码库中使用C#2.0和C#4.0。您已经回答了自己的问题:尝试创建新的MessageQueue,并捕获InvalidOperationException 如果您没有得到异常,则启用MQ;如果您得到一个异常,它将不会被启用。(如果创建了MessageQueue实例,您可以处置该实例,因为您仅将其用于

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

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

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


如果您没有得到异常,则启用MQ;如果您得到一个异常,它将不会被启用。(如果创建了MessageQueue实例,您可以处置该实例,因为您仅将其用于检测支持)

您可以使用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? }
List services=ServiceController.GetServices().ToList();
ServiceController msQue=services.Find(o=>o.ServiceName==“MSMQ”);
如果(msQue!=null){
如果(msQue.Status==ServiceControllerStatus.Running){
//它正在运行。
}
}否则{//未安装?}

回答有点晚,但如果您正在编写脚本,fan Powershell将为您提供帮助。 要获取数字的状态更新,请使用以下脚本:

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

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

您确实回答了您的问题,只需尝试以下操作{//创建或打开MessageQueue}捕获(InvalidOperationException){//未启用}使用异常检测状态/信息是一种不好的做法,除非绝对必要。非常好!接受作为答案。修改了安装MSMQ时操作系统运行的MSMQ服务的确切名称。至少在Windows 7和Windows XP上,
ServiceName
MSMQ
。感谢您的回答。。但问题显然是C(如果你看到标签的话:)哎呀!没有注意到,但是现在一天的Powershell在.net框架中是如此紧密地联系在一起,它可以被本机调用#只是说说而已