【问题标题】:Delete MSMQ Queue During Uninstall卸载期间删除 MSMQ 队列
【发布时间】:2010-11-28 05:35:49
【问题描述】:

是否可以删除服务用户创建的私人消息队列?在卸载期间,我们想清理我们的应用程序创建的所有消息队列。出于安全目的,对这些队列的访问仅限于当前用户 (ServiceUser)。在卸载过程中,我们拥有管理员权限,但当我们尝试删除队列或修改队列上的权限时,仍然会收到拒绝访问 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."
            }                
        }
    }

【问题讨论】:

    标签: c# msmq


    【解决方案1】:

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

    异常是在“SetPermissions”调用还是“Delete”调用中引发的?

    【讨论】:

    • 删除调用和 SetPermissions 调用都抛出。
    猜你喜欢
    • 2016-08-10
    • 1970-01-01
    • 2017-08-15
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 2011-06-16
    相关资源
    最近更新 更多