Подтвердить что ты не робот

Нет разрешения на доступ к приватной MSMQ

На компьютере с 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
4b9b3361

Ответ 1

Это может произойти, если .NET Service удалила группу "Все" из разрешений частной очереди. Вот несколько шагов, которые вы можете предпринять, чтобы решить эту проблему:

  • Остановить службу MSMQ

  • Откройте папку C:\WINDOWS\system32\msmq\storage\lqs

  • Найдите файл в этой папке, который описывает вашу очередь - (incommingQueue)

  • Используя блокнот, откройте файл lqs для какой-либо другой частной очереди с хорошими разрешениями безопасности. (Если у вас нет других частных очередей, создайте их)

  • Найдите строку в файле, начинающемся с Security=....

  • Скопируйте целую строку в буфер обмена (обратите внимание на Word Wrap, эта строка будет довольно длинной)

  • Откройте файл lqs для вашей очереди проблем в текстовом редакторе

  • Перезапишите строку Security=... в этом файле с содержимым вашего буфера обмена

  • Сохранить измененный файл lqs

  • Запустите службу MSMQ

Вы должны обнаружить, что очередь задач теперь имеет те же права, что и очередь, параметры безопасности которой вы скопировали на шаге 6 выше.

Ответ 2

Решение, размещенное здесь, кажется немного взломанным. Возможно, это необходимо для Windows XP. Я столкнулся с чем-то похожим с использованием Windows 7 и использовал другой подход для решения этой проблемы.

Ситуация:

  • Программа состоит из кода С#, который создает частную транзакционную очередь
  • Программа запускается как служба Windows, работающая в учетной записи Local System.
  • Когда служба запускается, приватная очередь создается с учетной записью Local System в качестве владельца.
  • Даже если я являюсь администратором, я не могу проверять сообщения из очереди.

Решение (это для Windows 7):

  • Запустите compmgmt.msc
  • Откройте "Услуги и приложения"
  • Откройте "Очереди сообщений"
  • Откройте 'Private Queues'
  • Щелкните правой кнопкой мыши только что созданную очередь
  • Нажмите "Свойства"
  • Выберите вкладку "Безопасность"
  • Нажмите "Дополнительно"
  • Выберите вкладку "Владелец"
  • Выберите "Администратор"
  • Выберите вкладку "Разрешения"
  • Нажмите "Добавить"
  • Введите имя вашей учетной записи (например, "Администратор" )
  • Нажмите "Проверить имена"
  • Нажмите "ОК"
  • Нажмите "ОК"
  • Нажмите "ОК"

Теперь вы можете получить доступ к сообщениям в очереди и также очистить очередь, если хотите.