繁体   English   中英

Windows MessageQueue触发器和规则:第一次调用时批处理文件不起作用

[英]Windows MessageQueue trigger and rule: Batch-File doens't work on first call

我今天意识到一个非常奇怪的问题。 我正在编写一个批处理文件,该文件使用trigadm.exe在特定的Windows消息队列上生成规则和触发器。

现在,触发器和规则的创建不是问题,因为我已经对其进行了多次测试并且可以正常工作。 我想要的是,首先检查规则和触发器是否已经存在。 如果它们不存在,那么我将创建它们。 当它们已经存在时,我将不执行任何操作并退出批处理脚本。

当我通过trigadm.exe生成规则和触发器时,总是得到该规则的GUID和触发器的GUID。 为了以后检查它们,我将这些规则保存到文本文件中。 因此,当我检查它们是否存在时,只要存在特定GUID的规则或触发器,我就从文本文件中读取这些GUID并使用trigadm.exe方法。 当存在规则或触发器时,我会收到一条消息,例如:ID为b5ea975a-efd6-444a-9ae5-2a366e723980的规则的详细信息。...如果规则或触发器不存在,我也会得到消息,如:失败:特定规则不存在。 因此,我还将此消息也保存到文件中,并检查竞争内容是否包含单词:Details。 如果包含该词,我将不会创建规则或触发器。

所以主要的问题是 当我尝试从Windows命令提示符下调用批处理文件时,在第一次调用时它不起作用。 我必须调用批处理文件大约4次,直到它起作用。

有谁知道这里可能是什么问题?

@ECHO OFF
IF EXIST C:\temp\WarehouseOrder\Installation\ruleId.txt (

    SET /p rId=<C:\temp\WarehouseOrder\Installation\ruleId.txt

    trigadm /request:GetRule /ID:%rId% > C:\temp\WarehouseOrder\Installation\msg.txt

    SET /p msg=<C:\temp\WarehouseOrder\Installation\msg.txt

    SET result=%msg:~0,7%

    IF "%result%" == "Details" (
        ECHO rule already exists > result.txt
    )
)

如果您不希望使用延迟扩展,则可以重组脚本。

@ECHO OFF
IF NOT EXIST C:\temp\WarehouseOrder\Installation\ruleId.txt GOTO :EOF
SET /P "rId=<C:\temp\WarehouseOrder\Installation\ruleId.txt"
(trigadm /request:GetRule /ID:%rId%)>C:\temp\WarehouseOrder\Installation\msg.txt
SET /P "msg=<C:\temp\WarehouseOrder\Installation\msg.txt"
IF /I "%msg:~,7%"=="Details" ECHO=rule already exists>result.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM