Нет разрешения на доступ к частному MSMQ - PullRequest
25 голосов
/ 23 апреля 2009

На машине с 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

Ответы [ 2 ]

52 голосов
/ 24 апреля 2009

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

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

  2. Открыть папку C:\WINDOWS\system32\msmq\storage\lqs

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

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

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

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

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

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

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

  10. Запустить службу MSMQ

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

26 голосов
/ 29 июня 2010

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

Положение:

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

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

  1. Запустите compmgmt.msc
  2. Открыть «Службы и приложения»
  3. Открыть «Очереди сообщений»
  4. Открыть «Личные очереди»
  5. Щелкните правой кнопкой мыши вновь созданную очередь
  6. Нажмите «Свойства»
  7. Выберите вкладку «Безопасность»
  8. Нажмите «Дополнительно»
  9. Выберите вкладку «Владелец»
  10. Выберите «Администратор»
  11. Выберите вкладку «Разрешения»
  12. Нажмите «Добавить»
  13. Введите имя своей учетной записи (например, «Администратор»)
  14. Нажмите «Проверить имена»
  15. Нажмите «ОК»
  16. Нажмите «ОК»
  17. Нажмите «ОК»

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

...