我们正在使用 Nant 部署应用程序,并且在此过程中需要创建一些 MSMQ 队列。
我们使用 Nant/psexec/cscript 调用 VBScript 来创建队列本身,但我们还需要设置权限。
这可以通过编程方式完成吗?
我知道在脚本中设置 MSMQ 队列的权限,但是该问题要求 PowerShell 或 VBScript,并且已接受 PowerShell 的答案。我们没有可用的 PowerShell,所以这个问题是针对 VBScript 的。
我们正在使用 Nant 部署应用程序,并且在此过程中需要创建一些 MSMQ 队列。
我们使用 Nant/psexec/cscript 调用 VBScript 来创建队列本身,但我们还需要设置权限。
这可以通过编程方式完成吗?
我知道在脚本中设置 MSMQ 队列的权限,但是该问题要求 PowerShell 或 VBScript,并且已接受 PowerShell 的答案。我们没有可用的 PowerShell,所以这个问题是针对 VBScript 的。
根据这篇文章,MSMQ 脚本 API 不提供任何设置查询权限的方法,因此无法使用 VBScript 完成此任务。
我可以建议以下解决方法:
System.Messaging
集提供的 MSMQ .NET API。)MQSetQueueSecurity
(在 C 或 C++ 中)MessageQueue.SetPermissions
(在 .NET 中)刚刚遇到这个,看到它没有答案。这里的诀窍是直接在 nAnt 中使用 VB.Net 或 C# 代码。您可以使用 nAnt 包含来执行此操作,并在全局空间中使用脚本任务;在代码中,派生自 Task 类。
或者。您可以将脚本块放在目标中。我更喜欢前一种方法,因为它更容易重用和传递参数。
无论哪种情况,这都不是 VBScript,它是完全编译的 .Net 代码,因此您几乎可以做任何事情。
在您的代码元素中,导入 System.Messaging,并在您的 ExecuteTask 覆盖中创建队列。不要忘记为 .\Users 授予读/写/查看权限,否则您可能无法正确使用队列,除非是运行 nAnt 脚本的用户(通常不是 Web 服务器或 Windows正在读取队列的服务。)
此外,由于您拥有对 Messaging.MessageQueue 类的完全访问权限,您可以检查是否存在并删除现有队列!