2011-10-11 78 views
3

我想從本地Win7企業計算機上的專用隊列中獲取MSMQ消息的計數。我可以毫無問題地從遠程計算機獲取計數,代碼在Win2008 Server R2上運行。我使用C#VS 2008如何從本地Win7機器上的專用隊列獲取MSMQ消息計數?

代碼示例:

int result = MQMgmtGetInfo(cname, "queue=DIRECT=OS:" + qname, ref props); 

其中cname是專用隊列,MyLocalComputer機器名,並
qname是路徑參考專用隊列,MyLocalComputer\\private$\\QueueName

當我從包含專用隊列的Win7計算機調用此代碼時,我得到一個-1072824319返回值。隊列中有消息。

如果我從WinXP計算機調用此代碼來獲取Win7隊列的計數,我會得到正確的計數。我也可以調用WinXP計算機的代碼,從同一臺WinXP計算機上的本地專用隊列中獲取計數,並獲得正確的計數。

在Win7上訪問本地專用隊列有什麼不同嗎?由於我可以遠程訪問隊列,所以我不認爲這是一個權限問題,但我可能是錯的。

+1

這裏是我發現,似乎工作。如果MQMgmtGetInfo使用的cname變量指向本地計算機,則當傳遞給MQMgmtGetInfo時,此變量必須爲null。我添加了一個函數來檢查本地機器並相應地設置cname。 – lbills

+0

你應該回答自己的問題並接受答案。這非常有幫助,但直到我跑下其他兩個洞後,我纔看到您的評論。 – Langdon

回答

1

聽起來就像您正在使用MSMQ 3.0 API。 Windows 7使用MSMQ 4.0。

在.NET參考窗口中查找System.Messaging(version 4.0.0.0)並添加到您的項目中。

在取此鏈接看看:http://www.codeproject.com/KB/cs/mgpmyqueue.aspx

的[]

Renan的

+0

MSMQ的版本應該無關緊要 - MSMQ的一個版本應該支持舊版本的所有API。 –

+0

OS的MSMQ版本列表:http://blogs.msdn.com/b/johnbreakwell/archive/2007/03/14/how-do-i-install-msmq-4-0-on-my-windows- 2003-server.aspx –

1

-1072824319 = 0xC00E0001這是一個通用的MSMQ錯誤。
嘗試使用句號代替機器名稱。
這將告訴MSMQ使用「本地主機」。
如果有效,那麼機器解析它自己的名稱可能會有問題。

乾杯
約翰Breakwell

+0

謝謝,約翰。這個特定的代碼運行在我的另一個程序使用的DLL中。我正在使用機器名稱,因爲我不知道我要訪問的MSMQ將安裝在哪裏 - 遠程或本地。現在,由於它可以在WinXP上運行,而不是Win7,所以我認爲我需要通過app.manifest請求提升我的DLL的權限。這聽起來是對的嗎?我會試一試。 – lbills

+0

當然 - 完全停止只是一個故障排除建議。 –

+0

我不知道是否要求提升的權限將幫助 - 值得一試。 –