2011-05-20 42 views
10

我知道當我嘗試創建新的MessageQueue時,如果未啓用消息隊列,則系統會拋出InvalidOperationException如何以編程方式知道機器上是否啓用了消息隊列?

但是如何通過編程方式知道是否在機器上啓用了消息隊列? 我在兩個不同的代碼庫中使用C#2.0 & C#4.0。

+0

你確實回答了你的問題,只是試試這個 嘗試 {// 創建或打開的MessageQueue } 趕上(InvalidOperationException異常) {// 未啓用 } – Vimvq1987 2011-05-20 08:07:45

+0

使用異常檢測狀態除非絕對必要,否則信息是一種不好的做法。 – Travis 2011-05-21 17:47:25

回答

17

您可以使用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? } 
+0

優秀!接受爲答案。修改安裝MSMQ時操作系統運行的MSMQ服務的確切名稱。至少在Windows 7和Windows XP上,「ServiceName」是「MSMQ」。 – Learner 2011-05-20 09:38:19

+0

太棒了!祝你有個好的一天。 – 2011-05-20 09:40:03

-1

您已經在那裏回答了您自己的問題:嘗試創建一個新的MessageQueue,並捕獲InvalidOperationException。

如果您沒有發生異常,則啓用MQ;如果您遇到異常,則不會啓用。 (如果創建了MessageQueue實例,則可能會將其丟棄,因爲您只用它來檢測支持)

2

回答晚了一點,但如果你正在編寫腳本風扇PowerShell是在你的幫助。 要獲得數字狀態更新,下面的腳本使用:

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

這將顯示您的隊列,並在每個隊列中的項目數的名稱。希望這有助於某個人。 :d

+0

感謝您的答案..但問題顯然是C#,如果你看到標籤.. :) – Learner 2013-11-26 04:57:24

+0

糟糕!沒有引起足夠的重視,但是現在一天,Powershell在.net框架中如此緊密地聯繫起來,以至於它可以在本地調用。 #Justsaying – 2013-11-26 15:13:07

相關問題