在XP计算机上有一个由.net服务创建的私人消息队列。 当我想在VB6应用程序中访问此私有队列时,我不断收到“访问被拒绝”错误。 所以这似乎是一个安全问题,只有我不明白为什么即使我作为管理员登录我仍然 无法访问在同一台计算机上创建的队列。 还有什么我必须考虑的事情。
关于如何在VB6中使用队列的示例
Public msgQueue As MSMQQueue
Private Sub OpenQueue()
Dim MQ As New MSMQQueueInfo
MQ .PathName = ".\Private$\incommingQueue"
Set msgQueue = MQ.Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE)
End Sub
答案 0 :(得分:52)
如果.NET服务从私有队列的权限中删除了“Everyone”组,则会发生这种情况。以下是您可以采取的一些步骤来解决此问题:
停止MSMQ服务
打开文件夹C:\WINDOWS\system32\msmq\storage\lqs
在此文件夹中找到描述您的队列的文件 - (incommingQueue)
使用记事本,打开具有良好安全权限的其他私有队列的lqs文件。 (如果您没有任何其他私人队列,请创建一个)
在文件中找到以Security=....
将整行复制到剪贴板(注意Word Wrap,此行将很长)
在文本编辑器中打开问题队列的lqs文件
使用剪贴板的内容覆盖此文件中的Security=...
行
保存修改后的lqs文件
启动MSMQ服务
您应该会发现问题队列现在具有与您在上面的步骤6中复制了其安全设置的队列相同的权限。
答案 1 :(得分:26)
此处发布的解决方案似乎有些黑客攻击。也许这对Windows XP来说是必要的。我在使用Windows 7时遇到了类似的问题,并使用了不同的方法来解决这个问题。
情况:
解决方案(适用于Windows 7):
现在,您可以访问队列中的消息,并根据需要清除队列。