【问题标题】:Updating MSMQ permissions on a private queue via C#通过 C# 更新私有队列上的 MSMQ 权限
【发布时间】:2012-02-03 10:24:10
【问题描述】:

我们在生产系统中使用了一些私有 MSMQ 队列。自实施以来,我们不得不使用队列更新一些东西并重新创建它们以使用更新的代码。我们有 200 多台机器需要这些更新,因此我正在开发一个程序,该程序将通过 SMS 推送来进行此更新。

我注意到的是,唯一可以运行我的程序进行更新的人是最初在该特定机器上设置专用队列的人。由于机器数量的关系,有多个管理员设置这些队列。

由于并非所有员工都在这里工作,这给我 [我的计划] 带来了问题。权限不允许程序更新我需要的所有内容。我用谷歌搜索并找到了这个链接http://social.msdn.microsoft.com/Forums/hu-HU/msmq/thread/36a3d910-d533-4af3-86dc-498d00c68fef,它显示了如何通过修改为每个队列创建的文件来更新权限。伟大的!当我手动导航到该路径并进行更新时,它可以工作。现在我想通过 SMS 推送以编程方式进行。

当我试图从我的程序中运行它时,我收到一条错误消息,指出目录不存在“C:\Windows\System32\msmq\storage\lqs”。嗯?当我将该路径输入“开始”->“运行”时,它会很好地显示该文件夹。好吧,中断我的代码的 if (Directory.Exists(path)) 部分肯定会返回错误。如果我删除 System32 之外的所有文件夹,那么 Directory.Exsts 就可以正常工作。

为什么我的程序无法确定该 msmq 文件夹是否存在?我试过“以管理员身份运行”,它仍然返回错误。我需要做什么才能使该检查生效?

谢谢

编辑:这真的很奇怪,我编写了一个 FindAndReplace API,它将接收路径(文件或目录)、查找文本、替换文本等。当我从 Find And Replace 运行该程序时GUI 包装器,它工作得很好。但是当我从我的更新程序中调用这个 API 时,它说该目录不存在。这真的很令人困惑。 (我可能应该删除 MSMQ 标记,因为它与我的问题无关......)

【问题讨论】:

  • 找出原因。 FindAndReplace GUI 包装程序(即 WAS 查找目录)在 64 位模式下运行,而另一个不工作的程序在 32 位模式下运行。在调试这个时,我发现在那个目录上为我的文本做一个 findstr 是行不通的,而只做一个常规的 find 就行了。非常奇怪的行为......

标签: c# .net system.io.directory


【解决方案1】:

项目 + 属性,构建选项卡。将“目标平台”设置从 x86 更改为 AnyCPU。这使您可以在 64 模式下运行程序,因此 c:\windows\system32 目录搜索不会被重定向到 c:\windows\syswow64。

【讨论】:

  • 啊,我知道如何修复它,但我不知道为什么在32位模式下运行时它不起作用。谢谢@HansPassant
猜你喜欢
  • 2012-04-27
  • 2016-08-10
  • 2011-03-24
  • 2018-09-02
  • 2011-03-20
  • 2011-05-07
  • 2014-12-01
  • 2011-09-23
  • 2012-05-12
相关资源
最近更新 更多