我試試這個: MessageQueue mq = new MessageQueue(「。\ Journal $」); mq.Purge();如何以編程方式在工作組安裝上清除MSMQ系統隊列日誌?
它在XP上運行良好。 但是,在Windows 2003服務器上,我總是遇到以下錯誤: 「工作組安裝計算機不支持該操作。」
我試試這個: MessageQueue mq = new MessageQueue(「。\ Journal $」); mq.Purge();如何以編程方式在工作組安裝上清除MSMQ系統隊列日誌?
它在XP上運行良好。 但是,在Windows 2003服務器上,我總是遇到以下錯誤: 「工作組安裝計算機不支持該操作。」
嘗試使用格式名稱,像這樣:
MessageQueue mq = new MessageQueue("DIRECT=OS:computername\SYSTEM$;JOURNAL");
mq.Purge();
我認爲系統隊列不能由路徑訪問。你必須使用格式名稱。
系統隊列正確的格式:
FormatName:Direct=os:.\\System$;JOURNAL
我測試過這種格式在Windows 7和Windows操作系統後,2003
(點:指本地主機/本地計算機)
var systemJournalQueue = new MessageQueue("FormatName:Direct=os:.\\System$;JOURNAL");
var systemDeadLetterQueue = new MessageQueue("FormatName:Direct=os:.\\System$;DEADLETTER");
var systemDeadXLetterQueue =new MessageQueue("FormatName:Direct=os:.\\System$;DEADXACT"));
systemJournalQueue.Purge();
或者如果你想保留N天消息你可以這樣做:
private static void PurgeQueues(int archiveAfterHowManyDays, MessageQueue queue)
{
queue.Formatter = new XmlMessageFormatter(new Type[] { typeof(System.String) });
queue.MessageReadPropertyFilter.ArrivedTime = true;
using (MessageEnumerator messageReader = queue.GetMessageEnumerator2())
{
while (messageReader.MoveNext())
{
Message m = messageReader.Current;
if (m.ArrivedTime.AddDays(archiveAfterHowManyDays) < DateTime.Now)
{
queue.ReceiveById(m.Id);
}
}
}
}
這是不正確的代碼甚至不會編譯,(因爲反斜槓),請參閱我的回答正確的語法(你的鏈接沒給我正確的答案,不過) 。 – 2012-05-11 22:23:38