2009-07-15 14 views
3

私はこれを試してみます: MessageQueue mq = new MessageQueue( "。\ Journal $"); mq.Purge();ワークグループインストールでMSMQシステムキュージャーナルをプログラムで削除する方法はありますか。

XPではうまく動作します。 しかし、Windows 2003サーバーでは、私はいつもこのエラーがあります。 "ワークグループインストールコンピュータはこの操作をサポートしていません。"

答えて

1

はそうのような形式の名前を使用してみてください:

MessageQueue mq = new MessageQueue("DIRECT=OS:computername\SYSTEM$;JOURNAL"); 
mq.Purge(); 

私はシステムキューがパスでアクセスすることはできないと思います。フォーマット名を使用する必要があります。

look at Yoel Arnon's comment at the bottom of the page.

+0

これは間違っている、コードが偶数(理由はバックスラッシュの)、コンパイルされません、正しい構文のための私の答えを参照してください(あなたのリンクは、しかし、私に適切な答えを与えていました) 。 –

5

システムキューの正しい形式:

FormatName:Direct=os:.\\System$;JOURNAL 

私は、Windows 7およびWindows 2003

をこの形式をテストしてみた(OSの後のドットは:/ localhostと意味ローカルコンピュータ)

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); 
      } 
     } 
    } 
}