我有一個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. –