问题描述
我有一个无法启动的 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 设置权限这样做
- 打开计算机管理
- 扩展消息队列
- 扩展专用队列
- 右键单击您使用的队列并选择属性
- 选择安全选项卡并为您的本地用户设置权限
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
- open Computer Management
- Expand Message Queuing
- Expand Private Queues
- right click on the Queue your using and select Properties
- select the security tab and set permissions to your local user
这篇关于Win Service 获取消息队列的权限被拒绝的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!