本文介绍了Win Service 获取消息队列的权限被拒绝的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个无法启动的 WinService,因为 NServiceBus 抛出服务无法启动.System.Messaging.MessageQueueException (0x80004005): 对消息队列系统的访问被拒绝."

这是在 Windows 7 上

我尝试将服务运行为:LocalSystem、Localservice 和 NetworkService

这里是我如何设置 NServiceBus

 私有静态 IBus _serviceBus;私有静态 AuditMessageHandler _messageHandler;公共审计队列处理器(){_messageHandler = new AuditMessageHandler();_serviceBus = Configure.With().Log4Net().DefaultBuilder().XmlSerializer().MsmqTransport().IsTransactional(真).PurgeOnStartup(false).UnicastBus().ImpersonateSender(false).LoadMessageHandlers().CreateBus().开始();}

这是我的配置

<configSections><section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/><section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/></configSections><MsmqTransportConfig InputQueue="LoggerInputQueue" ErrorQueue="LoggerInputError" NumberOfWorkerThreads="1" MaxRetries="5"/><单播总线配置><MessageEndpointMappings><add Messages="Truckstop2.Imports.Objects.AuditMessage,Truckstop2.Imports.Objects" Endpoint="InputQueue@newimp001"/></MessageEndpointMappings></UnicastBusConfig><启动><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></配置>
解决方案

找到解决方案!

这是因为服务包含在 NETWORK SERVICE 用户中.您需要为您访问的私有 MSMQ 设置权限这样做

  1. 打开计算机管理
  2. 扩展消息队列
  3. 扩展专用队列
  4. 右键单击您使用的队列并选择属性
  5. 选择安全选项卡并为您的本地用户设置权限

I have a WinService that can't start because NServiceBus throws "Service cannot be started. System.Messaging.MessageQueueException (0x80004005): Access to Message Queuing system is denied."

This is on Windows 7

I have tried to run the service as: LocalSystem, Localservice, and NetworkService

here is how I'm setting up NServiceBus

 private static IBus _serviceBus;
    private static AuditMessageHandler _messageHandler;

    public AuditQueueProcessor()
    {
        _messageHandler = new AuditMessageHandler();
        _serviceBus = Configure.With()
            .Log4Net()
            .DefaultBuilder()
            .XmlSerializer()
            .MsmqTransport()
            .IsTransactional(true)
            .PurgeOnStartup(false)
            .UnicastBus()
            .ImpersonateSender(false)
            .LoadMessageHandlers()
            .CreateBus()
            .Start();
    }

here is my Config

<configuration>
  <configSections>
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/>
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>

  </configSections>

  <MsmqTransportConfig InputQueue="LoggerInputQueue" ErrorQueue="LoggerInputError" NumberOfWorkerThreads="1" MaxRetries="5"/>

  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="Truckstop2.Imports.Objects.AuditMessage,Truckstop2.Imports.Objects" Endpoint="InputQueue@newimp001" />
    </MessageEndpointMappings>
  </UnicastBusConfig>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
</configuration>
解决方案

Found the solution !

It's because service incorporated in NETWORK SERVICE user.You need to set permisions to the private MSMQ your accessingto do this

  1. open Computer Management
  2. Expand Message Queuing
  3. Expand Private Queues
  4. right click on the Queue your using and select Properties
  5. select the security tab and set permissions to your local user

这篇关于Win Service 获取消息队列的权限被拒绝的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-04 01:38
查看更多