是否可以删除服务用户创建的私人消息队列?在卸载期间,我们希望清理由应用程序创建的任何消息队列。出于安全考虑,对这些队列的访问仅限于当前用户(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."
}
}
}
答案 0 :(得分:0)
管理员是不够的。您必须拥有“删除”权限。在此之前,您必须拥有“设置权限”权限(或者是队列所有者)才能设置权限。
“SetPermissions”调用或“删除”调用是否抛出异常?