我有一个C#应用程序,我已经使用多年来脚本远程桌面连接。它总是建立在AxMsRdpClient3上(注意3,我猜是某种版本号)。我希望能够使用AxMsRdpClient8(版本8)中的功能,但据我了解,这需要安装远程桌面版本8。但并非所有用户都已安装(甚至可以在Windows XP/Vista上安装它)。远程桌面ActiveX控件
因此,作为盛强建议,我现在在运行时创建的控制和我有一些代码,看起来像这样:
try
{
AxMsRdpClient8 rdp8 = new AxMsRdpClient8();
rdp8.BeginInit();
// set some properties here
rdp8.EndInit(); // throws Exception on machines without version 8 installed
}
catch (Exception ex)
{
AxMsRdpClient3 rdp3 = new AxMsRdpClient3();
rdp3.BeginInit();
// set some properties here
rdp3.EndInit();
}
正如预期的那样,rdp8.EndInit()抛出一个异常,在不机器安装了远程桌面版本8。问题是,在我们尝试创建AxMSRDPClient8之后,rdp3.EndInit()在旧机器上也会失败(类未注册)。如果我不试图先创建AxMSRDPClient8,则AxMSRDPClient3将初始化并正常工作。
添加os检测代码以避免尝试摆在首位。 –
我可以检测操作系统,但操作系统并没有真正告诉你使用哪个AxMsRdpClient版本。例如,远程桌面8可供Windows 7下载,但默认情况下不会安装。另外,如果我检测到操作系统,我的代码将无法在下一版本的Windows上运行,其中类似上面的内容会继续工作。上述概念对于activeX控件无效吗?为什么一个有效的ActiveX控件会因为之前有一个无效控件而失败? – Jason
每个CLSID都与更高版本的系统兼容。例如,Windows Vista上可编写脚本控件的CLSID可用于更高版本的系统,如Windows 7. –