簡體   English   中英

無法使用MessageQueueInstaller設置MSMQ消息隊列權限

[英]Unable to set MSMQ message queue permissions using MessageQueueInstaller

我正在嘗試創建用於Windows服務的私人消息隊列。 我在服務的ProjectInstaller類中創建隊列。 在上述類的構造函數中,我創建一個MessageQueueInstaller對象,然后將其添加到我的本地Installer.Installers屬性中,如下所示:

var path = _config?.Settings[QUEUE_PATH]?.Value;
if (string.IsNullOrEmpty(path))
{
    Console.WriteLine($"Could not install MSMQ message queue. Cannot install service. Missing private queue path value.");
    throw new ArgumentNullException(QUEUE_PATH, "Cannot create private message queue with null queue path.");
}
_q = new MessageQueueInstaller();
_q.Label = "Queue Name";
_q.Path = path;
_q.Transactional = true;
Installers.Add(_q);

由於我希望在安裝服務時傳遞憑據,並且我希望運行該服務的帳戶具有對正在創建的消息隊列的完全訪問權限,因此我訂閱了ServiceProcessInstallerAfterInstall事件,以獲取用戶名如下:

_serviceProcessInstaller.AfterInstall += (sender, args) =>
{
    _q.Permissions = new AccessControlList()
    {
        new AccessControlEntry(new Trustee(_serviceProcessInstaller.Username, null, TrusteeType.User),
            GenericAccessRights.All, StandardAccessRights.All, AccessControlEntryType.Allow)
    };
};

此過程成功完成,並且將ACL條目與期望值一起添加到了我的專用隊列的安全選項卡中,但是,當運行需要與MSMQ進行交互的服務時,我收到以下錯誤消息:

拒絕訪問消息隊列系統

奇怪的是,如果我從隊列的“安全性”選項卡中手動創建了完全相同的ACL條目 ,那么一切都會神奇地起作用!

另外,如果我以編程方式創建所有ACL(最后出現上述錯誤), 然后手動將“每個人”設置為“完全控制”,它也可以工作,但是在設置實際值的同一過程中,將“每個人”都設置為“完全控制”帳戶無效

最后,我在“ NT AUTHORITY \\ Network Service”下運行MSMQ服務。 嘗試以編程方式添加具有完全控制權限的帳戶(似乎已設置了所有權限,但仍然收到相同的錯誤),並且我還嘗試了將MSMQ服務作為本地系統運行都無濟於事。

老實說,我不確定該怎么做。 據我所知,這些權限是相同的,而不管它們是通過編程方式還是手動添加的,但顯然這實際上並不正確,否則這將起作用。

我在這里想念什么?

請讓我知道是否需要其他上下文。 謝謝!

我們正在使用以下代碼創建MSMQ隊列並設置權限。 效果很好:

public void CreateQueueIfNotExists(string queueName, List<string> users)
{
    if (!MessageQueue.Exists(queueName))
    {
        MessageQueue.Create(queueName);
        var queue = new MessageQueue(queueName);
        //set permissions for those users
        foreach (var user in users)
        {
            queue.SetPermissions(user, MessageQueueAccessRights.ReceiveMessage | MessageQueueAccessRights.WriteMessage, AccessControlEntryType.Allow);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM