c# - 如何识别 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。
到目前为止我尝试了什么
- 使用类的几个实现进行测试(从 MsRdpClient6NotSafeForScripting 到 MsRdpClient9NotSafeForScripting)
- 使用多种设置进行测试
问题
- 是否有任何设置可能导致此事件不触发?
- 有没有其他方法可以识别登录失败?
解决方案
检查项目文件中的 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>
推荐阅读
- firebase - Golang Firebase 管理员 SDK
- java - 将 Spark Java 数据集保存到某个位置时出现 NullPointerException
- java - Set TCP Client received data (External Thread) to TextView (Main Thread)
- oracle-sqldeveloper - How can I get one particular value out of this table?
- c - 如何将文件输入中的字符串数组存储到C中的struct元素中?
- python - Flask Restful:将 CSV 文件转换为 JSON 对象
- r - R - 如何迭代 4D 矩阵的每个切片
- sql-server-express - SQL Server Management Studio 未打开文件
- javascript - Tabulator - How to Clear a Selector Filter
- laravel - Laravel / Zend Barcode render strange codebar