Удалить очередь MSMQ во время удаления - PullRequest
0 голосов
/ 14 сентября 2009

Можно ли удалить личную очередь сообщений, созданную пользователем службы? Во время удаления мы хотели бы очистить все очереди сообщений, созданные нашим приложением. В целях безопасности доступ к этим очередям был ограничен текущим пользователем (ServiceUser). Во время удаления у нас есть права администратора, но мы все равно получаем отказ в доступе MessageQueueException, когда мы пытаемся удалить очередь или изменить privs в очереди.

Вот код очистки:

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

1 Ответ

0 голосов
/ 15 сентября 2009

Быть администратором недостаточно. Вы должны иметь разрешение «Удалить». А до этого вам нужно иметь право «Установить разрешение» (или быть владельцем очереди) для установки разрешений.

Возникает ли исключение при вызове "SetPermissions" или при вызове "Удалить"?

...