如何将虚拟通道与位于两个不同服务器上的两个 RemoteApps 一起使用?

How to use Virtual Channels with two RemoteApps located on two different Servers?

我做了一个64位的c++ Virtual Channel Client DLL

我使用 Virtual Channel Client Registration 更新了注册表(我选择了 Default\Addins 方式)

如果我启动远程桌面连接,一切正常:我的 DLL 加载到名为 mstsc.exe 的进程中,我导出的 VirtualChannelEntry 回调被调用,跳过细节,我能够到 send/receive 字节(在我自己的进程的帮助下,运行 在服务器会话中打开虚拟通道)。

我还可以打开到 另一个 服务器的第二个远程桌面连接。第二个 mstsc.exe 进程启动,它加载我的 DLL,一切正常。

当我将两个远程桌面替换为两个 "RemoteApps"(一个 RemoteApp 在第一台服务器上,另一个在第二台服务器上)时,我的问题就开始了。

当我启动第一个 RemoteApp 时,一切正常(mstsc.exe 启动,并加载我的 DLL)。

当我启动第二个 RemoteApp 时,没有新的 mstsc.exe,所以无法再次加载我的 DLL,但是现有的 mstsc.exe 不会调用我导出的 VirtualChannelEntry.我无法与第二台服务器建立虚拟通道。

重要的是顺序,而不是 RemoteApps。只有 第一个 启动的 RemoteApp 会为其服务器提供一个虚拟通道。

如果我只启动一个 RemoteApp,然后启动与其他服务器的完整远程桌面连接,一切正常:两个mstsc.exe加载我的DLL,两个虚拟通道建立。

问题:

如何对位于两个不同服务器上的两个 RemoteApps 使用虚拟通道?

为什么当我从两台服务器启动两个 RemoteApp 时只有一个 mstsc.exe,为什么那个 mstsc.exe 调用 VirtualChannelEntry 用于第二个连接?

我的 客户 OS 是 Windows 2012 年。 使用 Windows 10 Pro 作为客户端重现问题。

我在 Microsoft Technet 上得到了答案。我在这里复制它,也许对未来有帮助 reader.

将以下行添加到您的 RemoteApps RDP 文件中:

disableconnectionsharing:i:1

然后,每个启动的 RemoteApps 都会有一个 mstsc.exe 实例,它们都会调用您导出的 VirtualChannelEntry 回调。

注意,这是对问题的回答,其中说明 "two RemoteApps located on two different Servers"。

如果您不在这种情况下,上述配置选项可能会产生一些不良后果。

如果您是这方面的专家,请随时改进此答案。