在 UWP 和桌面应用程序之间共享命名互斥锁

CBH*_*ing 5 synchronization mutex uwp desktop-bridge

有没有办法在同一个包中的 UWP 应用程序和桌面桥应用程序之间共享互斥锁?它们似乎有不同的命名空间;使用相同的名称不会在进程之间产生相同的对象。根据 ,UWP 应用程序的对象WinObj存储在一个特殊的命名空间下,AppContainerNamedObjects\{APP_SID}而不是BaseNamedObjects像往常一样。然而,桌面应用程序——尽管从同一个应用程序包运行——确实使用了BaseNamedObjects命名空间,因此两个进程不能共享同步对象。

有没有办法解决?我想到的最好的事情涉及检查文件是否存在等愚蠢的事情,但这既过于复杂又表现不佳。互斥体简单、快速,专为这个用例而设计(跨进程同步);它们不能在这里使用吗?

eri*_*zer 2

您可以在 UWP 和桌面之间共享互斥锁,但我不知道这是否是一种黑客行为。我知道,我刚刚尝试过。在 C++ 方面,您调用 CreateMutex,然后(以某种方式)您可以通过进程间通信获知 UWP 应用程序的 PID。然后,您对您创建的互斥体调用 DuplicateHandle 和 SYNCHRONIZE 访问权限。然后,将这些句柄 ID 传递给 UWP 应用程序,该应用程序现在拥有互斥锁并可以等待它。在 UWP 应用中,您需要创建互斥体,然后使用传递给它的互斥体 ID 对其调用 SetSafeWaitHandle( )。这很hacky,但似乎有效。我不明白的是为什么它不适用于 AutoResetEvents。疯狂的。