卸载期间删除MSMQ队列

时间:2009-09-14 18:25:15

标签: c# msmq

是否可以删除服务用户创建的私人消息队列?在卸载期间,我们希望清理由应用程序创建的任何消息队列。出于安全考虑,对这些队列的访问仅限于当前用户(ServiceUser)。在卸载期间,我们具有管理员权限,但当我们尝试删除队列或修改队列中的privs时,仍然会获得拒绝访问的MessageQueueException。

这是清理代码:

    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 :(得分:0)

管理员是不够的。您必须拥有“删除”权限。在此之前,您必须拥有“设置权限”权限(或者是队列所有者)才能设置权限。

“SetPermissions”调用或“删除”调用是否抛出异常?