Получить текущую версию клиента Silverlight?

Я хочу знать, есть ли способ использовать C # для получения текущей версии Silverlight, которую запускает пользователь при открытии клиента разрабатываемого мной приложения.

Это для целей регистрации.

Я хочу знать, используют ли они Silverlight 3 или 4 в своих браузерах.


person Johangsl    schedule 04.05.2010    source источник


Ответы (3)


var dotNetRuntimeVersion = Deployment.Current.RuntimeVersion;
var silverlightVersion = Environment.Version.ToString();

Поддерживается в: 5, 4, 3

person antwarpes    schedule 30.01.2012
comment
Это неверно. Environment.Version показывает версию CLR, а не Silverlight: msdn.microsoft.com/en-us/library/. В моем текущем приложении, которое я разрабатываю, я использую Silverlight 5.1, но когда я проверяю Environment.Version, он показывает 5.0. Не то же самое! - person JoeCool; 25.04.2013

Используя только C #, я не знаю, но вы могли бы обнаружить его с помощью javascript, а затем отправить запрос ajax функции, которая позволяет серверу узнать, какая версия.

http://www.apijunkie.com/APIJunkie/blog/post/2009/04/How-to-programmatically-detect-Silverlight-version.aspx

Приведенный выше сценарий требует небольших изменений для работы с 4.0, но это должно быть достаточно просто.

person Paul    schedule 04.05.2010

Environment.Version может отличаться от версии плагина. Когда я использовал Silverlight 4, мне удалось найти версию, которая существенно отличалась от версии плагина, и, похоже, не было никакой закономерности.

Есть способ получить версию плагина Silverlight из JS, и есть способ добавить JS на страницу и вызвать его из Silverlight. Итак, с кодом отсюда: http://www.visiblox.com/blog/posts/2010/04/29/determining-silverlight-version-installed/ Мне удалось это сделать так:

var pScriptElement = HtmlPage.Document.CreateElement("script");
pScriptElement.SetAttribute("type", "text/javascript");
pScriptElement.SetProperty("text", "function GetSilverlightVersion(){var parts = Array(\"ver-major\", \"ver-minor\", \"ver-build\", \"ver-revision\");var nav = navigator.plugins[\"Silverlight Plug-In\"];var versionStr = \"\";if (nav) {versionStr = nav.description;} else {if(SilverlightIsInstalledOnIE)versionStr = GetSilverlightVersionOnIE();else versionStr = -1;}return versionStr;}function SilverlightIsInstalledOnIE(version){if(version == null)version = \"1.0\";var AgControl = new ActiveXObject(\"AgControl.AgControl\");    if(AgControl == null)return false;elsereturn AgControl.isVersionSupported(version);}function GetSilverlightVersionOnIE(){var currVersion = Array(1,0,0,0);for(var i=0;i<currVersion.length;i++){currVersion[i] = FindSupportedMaxVersionOnIE(currVersion, i,0,10000000);}return GetVersionString(currVersion);}function GetVersionString(versionArr,currVersion,index){if(index == null)index = -1;var versionStr = \"\";for(var i=0;i<versionArr.length;i++){if(i>0)versionStr += \".\";if(i==index)versionStr +=currVersion;elseversionStr += versionArr[i];}return versionStr;}function FindSupportedMaxVersionOnIE(versionArr, index,bottom,top){if(bottom >= top){return bottom;}var currVersion = bottom;var prevVersion = currVersion;var step = 1;while(currVersion<top){if(SilverlightIsInstalledOnIE(GetVersionString(versionArr,currVersion,index))){prevVersion = currVersion;currVersion += step;step *= 2;}elsereturn FindSupportedMaxVersionOnIE(versionArr, index,prevVersion,currVersion-1)}if(SilverlightIsInstalledOnIE(GetVersionString(versionArr,top,index)))return top;elsereturn FindSupportedMaxVersionOnIE(versionArr, index,prevVersion,top-1)}");
HtmlPage.Document.Body.AppendChild(pScriptElement);

var slVer = HtmlPage.Window.Invoke("GetSilverlightVersion", null);

Таким образом я смог получить надежную версию плагина для IE и других браузеров. Я создал свой собственный класс для анализа и сравнения версий, поэтому я могу легко проверить, использует ли пользователь плагин до исправлений или с известной неисправностью.

person Eloar    schedule 24.04.2013