web-dev-qa-db-ja.com

プライベートMSMQにアクセスする権限がありません

XPマシンには、.netサービスによって作成されたプライベートメッセージキューがあります。VB6アプリケーションでこのプライベートキューにアクセスしたい場合、「アクセスが拒否されました」というエラーが表示され続けます。したがって、これはセキュリティの問題のようですが、管理者としてログオンしていても、同じマシンで作成されたキューにアクセスできない理由がわかりません。他に何かしなければならないことがありますか。考慮に入れます。

VB6でキューを使用する方法のサンプル

Public msgQueue As MSMQQueue

Private Sub OpenQueue()

    Dim MQ As New MSMQQueueInfo
        MQ .PathName = ".\Private$\incommingQueue"

    Set msgQueue = MQ.Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE)

End Sub
25
Mez

これは、.NETサービスがプライベートキューのアクセス許可から「Everyone」グループを削除した場合に発生する可能性があります。これを解決するために実行できるいくつかの手順は次のとおりです。

  1. MSMQサービスを停止します

  2. フォルダC:\WINDOWS\system32\msmq\storage\lqsを開きます

  3. キューを説明するこのフォルダー内のファイルを見つけます-(incommingQueue)

  4. メモ帳を使用して、適切なセキュリティ権限を持つ他のプライベートキューのlqsファイルを開きます。 (他にプライベートキューがない場合は作成します)

  5. Security=....で始まるファイル内の行を見つけます

  6. 行全体をクリップボードにコピーします(ワードラップに注意してください。この行はかなり長くなります)

  7. 問題のあるキューのlqsファイルをテキストエディタで開きます

  8. このファイルのSecurity=...行をクリップボードの内容で上書きします

  9. 変更したlqsファイルを保存します

  10. MSMQサービスを開始します

問題のあるキューには、上記の手順6でセキュリティ設定をコピーしたキューと同じアクセス許可があることがわかります。

52
Jose Basilio

ここに投稿された解決策は少しハックのようです。おそらく、これはWindowsXPに必要です。私はWindows7を使用して同様の問題に遭遇し、これを解決するために別のアプローチを使用しました。

状況:

  • プログラムは、プライベートトランザクションキューを作成するC#コードで構成されています
  • プログラムは、ローカルシステムアカウントで実行されているWindowsサービスとして実行されます。
  • サービスが実行されると、ローカルシステムアカウントを所有者としてプライベートキューが作成されます。
  • 私は管理者ですが、キューからのメッセージを検査できません。

解決策(これはWindows 7用です):

  1. Compmgmt.mscを実行します
  2. 「サービスとアプリケーション」を開く
  3. 「メッセージキュー」を開く
  4. 「プライベートキュー」を開く
  5. 新しく作成したキューを右クリックします
  6. [プロパティ]をクリックします
  7. [セキュリティ]タブを選択します
  8. [詳細]をクリックします
  9. [所有者]タブを選択します
  10. 「管理者」を選択します
  11. [権限]タブを選択します
  12. [追加]をクリックします
  13. アカウントの名前を入力します(例:「管理者」)
  14. [名前を確認]をクリックします
  15. [OK]をクリックします
  16. [OK]をクリックします
  17. [OK]をクリックします

これで、キュー内のメッセージにアクセスし、必要に応じてキューをパージすることもできます。

27
YuriW