Windows PC上のすべてのユーザーセッションで単一インスタンスのアプリケーションである必要があるアプリケーションがあります。これまでの私の研究では、これを達成するためにミューテックスを使用していましたが、実際に問題があるかどうかはわかりませんが、これは本当にベストプラクティスの質問です。 、今VB6:すべてのユーザーセッションでシングルインスタンスアプリケーション
Private Const AppVer = "Global\UNIQUENAME" ' This is not what i am using but the name is unique
Public Sub Main()
Dim mutexValue As Long
mutexValue = CreateMutex(ByVal 0&, 1, AppVer)
If (Err.LastDllError = ERROR_ALREADY_EXISTS) Then
SaveTitle$ = App.Title
App.Title = "... duplicate instance."
MsgBox "A duplicate instance of this program exists."
CloseHandle mutexValue
Exit Sub
End If
' Else keep on truckin'
this記事に基づいて、私は私が私の上だとしてCreateMutex関数にNULLポインタを渡すことで、基本的に何でもセキュリティ記述子を割り当てることだと理解し信じる:
は、ここで最初にすべてのコードです現在ログインしているユーザーに関連付けられています。
これは、ログインした他のユーザーが元のユーザーのセッションで作成されたミューテックスを「見る」ことができないことを私に伝える(これ以上のガイダンスが必要な場合があります)同じ名前のミューテックスを作成することができます。
今、天皇の証拠がこれを裏付けるようです。私はメッセージボックスを使って "LastDLLError"をポップアップし、別のユーザーがアプリケーションを起動しようとしたときに(別のユーザーアカウントで既に実行中)、ERROR_ACCESS_DENIEDコードを受け取ります。私はこれに対してERROR_ALREADY_EXISTSコードと一緒にテストして、どちらかで終了してもOKです。しかし、これは一種のハックを感じ、私は誰かが代替案を提案できるかどうか疑問に思います。 "正しい"ことは、CreateMutex関数に適切なポインタを渡して、どのユーザにも既存のmutex(mutices?)を見るための適切な権限が与えられているようですが、現在はなくても可能ですログインしているユーザーは管理者です(これは容認できません)。いかなる援助/指導も大変ありがとうございます。前もって感謝します!
フィードバックのお寄せいただきありがとうございます。Joeのクラスのコードのように振る舞うようにコードを修正するつもりです。付属のテストアプリでは、それを動作させることができるはずです。これを閉じてください。 –