2009-09-14 6 views
0

Est-il possible de supprimer une file d'attente de messages privée créée par l'utilisateur du service? Lors de la désinstallation, nous souhaitons nettoyer toutes les files d'attente de messages créées par notre application. Pour des raisons de sécurité, l'accès à ces files d'attente a été restreint à l'utilisateur actuel (ServiceUser). Pendant la désinstallation, nous avons des privilèges d'administrateur, mais nous obtenons toujours un message d'accès refusé MessageQueueException lorsque nous essayons de supprimer la file d'attente ou de modifier les privilèges de la file d'attente.Supprimer la file d'attente MSMQ lors de la désinstallation

Voici le code de nettoyage:

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." 
      }     
     } 
    } 

Répondre

0

administrateur Être ne suffit pas. Vous devez avoir l'autorisation "Supprimer". Et avant cela, vous devez avoir le droit "Définir l'autorisation" (ou être le propriétaire de la file d'attente) pour définir les autorisations.

L'exception est-elle levée lors de l'appel "SetPermissions" ou de l'appel "Delete"?

+0

L'appel de suppression et le lancement des appels SetPermissions. –

Questions connexes