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

时间:2017-09-12 22:43:46

标签: uwp synchronization mutex desktop-bridge

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

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

1 个答案:

答案 0 :(得分:1)

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