2017-09-27 49 views
0
Imports System.Messaging 
Imports System.Collections 
Imports MSMQ 
Imports System.IO 
Imports System 
Imports System.Messaging.MessageQueue 
Imports System.Runtime.InteropServices 

Public Class PauseOutMessages 
    'Declare everything to be in the scope of all methods. 
    Dim mgmt As New MSMQManagement 
    Dim outqmgmt As MSMQOutgoingQueueManagement 
    Dim q As New MSMQApplication 
    Dim outgoingQueues As New ArrayList 
    Dim myQueue As New MessageQueue("FormatName:DIRECT=OS:myMachine\Private$\myQueue", QueueAccessMode.ReceiveAndAdmin) 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

     For Each queue In q.ActiveQueues 
      If queue.IndexOf("DIRECT=") >= 0 Then 
       outgoingQueues.Add(queue) 
      End If 
     Next 

    End Sub 

    Private Sub Pause_Click(sender As Object, e As EventArgs) Handles Pause.Click 
     For Each queuePath In outgoingQueues 
      mgmt.Init(FormatName:=queuePath) 
      outqmgmt = mgmt.Pause() 
     Next 
    End Sub 

    Private Sub Restart_Click(sender As Object, e As EventArgs) Handles Restart.Click 
     For Each queuePath In outgoingQueues 
      mgmt.Init(FormatName:=queuePath) 
      outqmgmt = mgmt.Resume() 
     Next 
    End Sub 

    Private Sub Send_Click(sender As Object, e As EventArgs) Handles Send.Click 
     myQueue.Send("Test") 
     For Each queue In q.ActiveQueues 
      If queue.IndexOf("DIRECT=") >= 0 Then 
       outgoingQueues.Add(queue) 
      End If 
     Next 
    End Sub 
End Class 

这里是我使用的代码,通过发送测试消息,它被卡在那里我想传出队列不存在的路径能够调用MSMQOutgoingQueueManagement.Pause或.Resume以启动和停止所有传出队列。获取试图暂停时访问被拒绝的错误/恢复传出消息队列

但是,我不断收到mgmt.Pause()或mgmt.Resume()中的错误,表示Access被拒绝。我似乎无法找到可以调整安全设置的传出队列属性的方法。任何帮助将不胜感激!

+0

[为其他用户创建的专用队列设置MSMQ权限](https://stackoverflow.com/q/4603787/1115360)是否为您提供了任何线索? –

+0

Andrew Morton,我碰到过这个,当我右键点击传出的消息队列时,没有属性选项,只有选项暂停或恢复,这是我试图以编程方式。谢谢 –

回答

0

已解决!

原来我只是需要以管理员身份启动visual studio,然后才能正常工作。