我知道當我嘗試創建新的MessageQueue
時,如果未啓用消息隊列,則系統會拋出InvalidOperationException
。如何以編程方式知道機器上是否啓用了消息隊列?
但是如何通過編程方式知道是否在機器上啓用了消息隊列? 我在兩個不同的代碼庫中使用C#2.0 & C#4.0。
我知道當我嘗試創建新的MessageQueue
時,如果未啓用消息隊列,則系統會拋出InvalidOperationException
。如何以編程方式知道機器上是否啓用了消息隊列?
但是如何通過編程方式知道是否在機器上啓用了消息隊列? 我在兩個不同的代碼庫中使用C#2.0 & C#4.0。
您可以使用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? }
優秀!接受爲答案。修改安裝MSMQ時操作系統運行的MSMQ服務的確切名稱。至少在Windows 7和Windows XP上,「ServiceName」是「MSMQ」。 – Learner 2011-05-20 09:38:19
太棒了!祝你有個好的一天。 – 2011-05-20 09:40:03
您已經在那裏回答了您自己的問題:嘗試創建一個新的MessageQueue,並捕獲InvalidOperationException。
如果您沒有發生異常,則啓用MQ;如果您遇到異常,則不會啓用。 (如果創建了MessageQueue實例,則可能會將其丟棄,因爲您只用它來檢測支持)
回答晚了一點,但如果你正在編寫腳本風扇PowerShell是在你的幫助。 要獲得數字狀態更新,下面的腳本使用:
$queues = Get-WmiObject Win32_PerfFormattedData_msmq_MSMQQueue
$queues | ft -property Name,MessagesInQueue
這將顯示您的隊列,並在每個隊列中的項目數的名稱。希望這有助於某個人。 :d
感謝您的答案..但問題顯然是C#,如果你看到標籤.. :) – Learner 2013-11-26 04:57:24
糟糕!沒有引起足夠的重視,但是現在一天,Powershell在.net框架中如此緊密地聯繫起來,以至於它可以在本地調用。 #Justsaying – 2013-11-26 15:13:07
你確實回答了你的問題,只是試試這個 嘗試 {// 創建或打開的MessageQueue } 趕上(InvalidOperationException異常) {// 未啓用 } – Vimvq1987 2011-05-20 08:07:45
使用異常檢測狀態除非絕對必要,否則信息是一種不好的做法。 – Travis 2011-05-21 17:47:25