我们的MSMQ 6.3.9600在Win Server 2012 R2 Standard上。 安装了消息队列,消息队列触发器和目录服务集成。消息队列和消息队列触发器服务都在“网络服务”下运行。
我们创建了一个非事务性的公共队列(比如称为Test)。在测试>属性 - 安全性,我给了网络服务“完全控制”,包括接收消息,偷看消息等
Test Queue有一个Trigger: -1规则称为TestRule -Queue路径名称:myServer \ Test -Enabled:是的 -Serialized:没有 - 消息处理类型:消息偷看
TestRule: - 规则条件:消息标签不包含“@@@@@@@@@@@@@@@@@@@ -Rule操作:调用独立可执行文件(EXE)C:\ myFolder \ myProgram.exe。 这个VB.NET程序是用.NET Framework 4.0编写的。 参数:调用参数:消息ID(作为变体)
在myProgram.exe属性的Windows资源管理器中>安全性,我还给网络服务“完全控制”程序及其文件夹。
当我向测试队列发送消息时(我在测试队列中看到这些消息),我在任务管理器中看到myProgram.exe,但它没有被执行。消息标签肯定不包含“@@@@@@@@@@@@@@@@”,因此应满足触发条件。 在myProgram.exe Form_Load中,我立即写入日志文件,但我没有看到该日志文件已创建。我也尝试将消息写入事件查看器,我在事件查看器中看不到这些消息。
我可以手动运行myProgram.exe(dbl点击exe或“run”),运行正常。
我重新启动了消息队列服务(它又启动了消息队列触发器服务),但myProgram.exe仍未执行。
同样的设置适用于我们的另外两台服务器(myProgram.exe在其他两台服务器上被激活并执行),它只是不能在这台服务器上运行。
还有什么我需要检查的吗? 谢谢。
答案 0 :(得分:0)
如果您可以在任务管理器中看到myProgram.exe,那么触发器已经运行并且应用程序已被执行。问题可能是您的应用程序没有权限执行它想要执行的任何操作,因为您可以在登录用户的上下文中加载它时使其工作。