Можно ли удалить личную очередь сообщений, созданную пользователем службы? Во время удаления мы хотели бы очистить все очереди сообщений, созданные нашим приложением. В целях безопасности доступ к этим очередям был ограничен текущим пользователем (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."
}
}
}