首页 > 解决方案 > 如何识别 RDP/MSTSC 登录失败的时间?

问题描述

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

我需要识别用户登录因错误凭据而失败的时间。

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

来自 Microsoft 文档OnLogonError

LOGON_FAILED_BAD_PASSWORD (0 (0x0))

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

多次报告该行为(未触发 OnLogonError),但没有解决方案。我发现的一次提示是:在 codeproject

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

但是从事件的文档来看,它应该得到支持

支持的最低客户端 Windows Vista

支持的最低服务器 Windows Server 2008


编辑

我下载了mRemoteNG,这似乎是一个非常干净的 RDP 实现。那里不使用该事件。但是当我添加它时,它也永远不会触发。

编辑2

连接到 Windows Server 2012 R2 时,该事件似乎有效。但不适用于 Server 2016 / 2019。


到目前为止我尝试了什么

问题

标签: c#eventsrdpocxmstsc

解决方案


检查项目文件中的 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>

推荐阅读