2009-09-14 86 views
0

是否可以刪除由服務用戶創建的私人消息隊列?在卸載過程中,我們希望清理由我們的應用程序創建的任何消息隊列。出於安全目的,對這些隊列的訪問權限僅限於當前用戶(ServiceUser)。在卸載期間,我們擁有管理員權限,但當我們嘗試刪除隊列或修改隊列上的priv時,仍然會拒絕MessageQueueException。卸載時刪除MSMQ隊列

下面是清理代碼:

public void DeleteAppQueues() 
    { 
     List<string> trash = new List<string>(); 

     var machineQueues = MessageQueue.GetPrivateQueuesByMachine("."); 
     foreach (var q in machineQueues) 
     { 
      if (IsAppQueue(q.QueueName)) 
      { 
       trash.Add(".\\" + q.QueueName); 
      } 
      q.Dispose(); 
     } 

     foreach (var queueName in trash) 
     { 
      try 
      { 
       using (MessageQueue delQueue = new MessageQueue(queueName)) 
       { 
        delQueue.SetPermissions("Everyone", MessageQueueAccessRights.FullControl, AccessControlEntryType.Allow); 
       } 
       MessageQueue.Delete(queueName); 
      } 
      catch (MessageQueueException ex) 
      { 
       // ex.Message is "Access to Message Queuing system is denied." 
      }     
     } 
    } 

回答

0

作爲管理員是不夠的。您必須具有「刪除」權限。在此之前,您必須擁有「設置權限」權限(或成爲隊列所有者)才能設置權限。

在「SetPermissions」調用或「刪除」調用上拋出異常嗎?

+0

刪除調用和SetPermissions調用都拋出。 – 2009-09-15 03:17:42