如何识别RDP / MSTSC登录失败?

4

我正在使用MsRdpClient9NotSafeForScripting类实现C#的RDP / MSTSC。

我需要识别出由于凭据错误导致用户登录失败的情况。

OnLogonError事件应该可以完成这个工作,但是它没有触发(至少在Server 2016上没有触发),而其他事件似乎正常工作。

从Microsoft对OnLogonError的文档中:

LOGON_FAILED_BAD_PASSWORD (0 (0x0))

登录失败,因为登录凭据无效。

这种不触发事件的行为已经多次被报告,但没有解决方案。我找到的一个提示是:在codeproject上:

经过进一步测试,我发现如果连接到Windows 2003服务器,则会进入事件。但是连接到Win7及更高版本以及Win2008R2及更高版本时不会。我想知道Microsoft是否在新系统中删除了事件功能?

但是根据事件的文档,它应该得到支持:

最低受支持客户端 Windows Vista

最低受支持服务器 Windows Server 2008


编辑

我下载了mRemoteNG,这似乎是RDP的一个非常干净的实现。但是当我添加它时,它也从未触发。

第二次编辑

连接到Windows Server 2012 R2时,该事件似乎可用。但是对于Server 2016 / 2019不起作用。


到目前为止我尝试过的

  • 测试几个类的实现(从MsRdpClient6NotSafeForScripting到MsRdpClient9NotSafeForScripting)
  • 测试了几个设置

问题

  • 有什么设置可能导致此事件不触发吗?
  • 有没有其他方法可以识别登录失败?
1个回答

1
检查项目文件中的ComReference,并尝试将WrapperTool设置为aximp而不是tlbimp。查看生成的AxInterop是否在构建后生成,并再次测试远程桌面连接。
它应该类似于这样。
<COMReference Include="RDPCOMAPILib.dll">
    <Guid>cc802d05-ae07-4c15-b496-db9d22aa0a84</Guid>
    <VersionMajor>1</VersionMajor>
    <VersionMinor>0</VersionMinor>
    <WrapperTool>aximp</WrapperTool>
    <Lcid>0</Lcid>
    <Isolated>false</Isolated>
</COMReference>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接