2010-05-04 2 views
3

Salut Je veux savoir s'il existe un moyen d'utiliser C# pour obtenir la version actuelle de Silverlight qu'un utilisateur exécute lors de l'ouverture d'un client d'une application en cours de développement.Obtenir la version Silverlight actuelle du client?

Son pour les fins de journalisation.

Je veux savoir si elles utilisent silverlight 3 ou 4 sur leur navigateur

Répondre

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

en Supported: 5, 4, 3

+1

Ceci est incorrect. Environment.Version montre la version du CLR, pas Silverlight: http://msdn.microsoft.com/en-us/library/system.environment.version(v=vs.95).aspx. Dans mon application actuelle, je développe, je cours Silverlight 5.1, mais quand j'inspecte Environment.Version, il montre 5.0. Pas la même chose! – JoeCool

0

Environment.Version peuvent différer de la version du plug-in. Quand j'utilisais Silverlight 4 j'ai réussi à trouver la version qui avait différé en majeur de la version du plugin et il semble qu'il n'y avait pas de régularité.

Il est possible d'obtenir la version Silverlight Plugin de JS et il est possible d'ajouter JS à la page et de l'appeler à partir de Silverlight. Donc, avec le code d'ici: http://www.visiblox.com/blog/posts/2010/04/29/determining-silverlight-version-installed/ j'ai réussi à le faire de cette façon:

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); 

De cette façon, j'ai pu obtenir la version du plug-in fiable sur IE et d'autres navigateurs. J'ai créé ma propre classe pour l'analyse et la comparaison des versions afin que je puisse facilement vérifier si l'utilisateur utilise le plugin avant les corrections ou avec un dysfonctionnement connu.