26

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
4

2 に答える 2

53

これは、.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 でセキュリティ設定をコピーしたキューと同じ権限が付与されていることがわかります。

于 2009-04-24T04:49:45.840 に答える
27

ここに投稿された解決策は、ちょっとしたハックのようです。おそらく、これは Windows XP に必要です。私は Windows 7 を使用して似たような問題に遭遇し、これを解決するために別のアプローチを使用しました。

状況:

  • プログラムは、プライベート トランザクション キューを作成する 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] をクリックします。

これで、キュー内のメッセージにアクセスしたり、必要に応じてキューを削除したりできます。

于 2010-06-29T06:48:16.683 に答える