12
votes

Comment puis-je détecter lorsque la fonctionnalité de fichier .NET est "désactivée" dans Windows 7 / Vista?

Mon application nécessite la version 3.5 de .NET Framework. J'ai récemment rencontré un client qui a eu le fichier .NET installé mais éteint sur Windows Vista (s'applique également à Windows 7).

Dans ce cas, mon installateur (InstallShield 2009) n'empelle pas l'utilisateur à installer le cadre (car il est déjà installé) et lorsque ma demande fonctionne, il se bloque immédiatement. J'ai essayé une autre application .NET et il se bloque immédiatement.

y a-t-il un moyen de détecter cette situation et de le gérer plus gracieusement? Il suffit de détecter cela lors de l'installation n'est pas idéal car le framework .NET peut être désactivé à tout moment. Idéalement, l'application serait en mesure de vérifier et d'afficher un message convivial à l'utilisateur leur indiquant qu'ils doivent allumer le cadre .NET.

Edit: "Désactiver" la structure .NET dans Windows Vista ou Windows 7 n'est pas la même chose que la désinstaller. Le cadre peut être simplement refusé sans réinstaller: http://windows.microsoft.com/en-us/windows-vista/turn-windows-features-on-or-off


8 commentaires

Je n'ai jamais entendu dire que le framework .NET pourrait être désactivé. Vous avez besoin d'une meilleure description de la situation, peut-être du client.


J'ai toujours pensé (supposé) que cela faisait cela était la même chose que la désinstallation.


@John, @dkackman. Désactiver une fonctionnalité de Windows 7 ne désinstalle pas la fonctionnalité, il est simplement désactivé ou désactivé.


@Chris: Il n'a pas non plus dit Windows 7. Ajouté aux balises.


@John, en fait, Vista prend également en charge la fonctionnalité du paradigme / off. C'était juste une habitude que j'ai saisi Windows 7.


Juste une pensée. Je n'ai actuellement pas le temps de désactiver .net sur ma machine Windows 7, mais de creuser autour du registre près de HKEY_LOCAL_MACHINE \ Software \ Microsoft \ .NetFramework \ Policy \ v 2.0. Existe-t-il des clés de registre qui changent ou disparaissent lorsque la fonctionnalité est "désactivée"? Si tel est le cas, vous devriez pouvoir vérifier les clés de registre sans élévation.


Ce serait bien si le chargeur CLRC détecte cet état et donnerait une indication amicale que "cette application ne peut pas exécuter car vous avez désactivé la fonctionnalité .NET Framework. Veuillez" cliquer ici "pour gérer vos fonctionnalités activées." Là encore, j'avais toujours espéré quelque chose de similaire sur l'échec de la résolution des assemblées à charge ...


En outre, les clés de registre référencées par support.microsoft.com/kb/928637 pourrait changer?


3 Réponses :


8
votes

Lorsque j'ai éteint la fonctionnalité, la valeur dans le registre indiquant que le framework est installée est supprimée. Vous pouvez vérifier cette valeur.

Regardez à: HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5


2 commentaires

Merci, je peux donc vérifier cette clé de registre, mais je devrais le faire de et un lanceur non géré, non?


Oui, malheureusement, il n'y aura pas de solution car la fonctionnalité peut être éteinte et à volonté.



3
votes

On dirait que vous allez écrire un lanceur non géré pour votre application. Rouler vos manches et avoir une belle plongée C ++ :)


0 commentaires

1
votes

Woot, je pense que cette URL pourrait avoir votre réponse:

http://blogs.msdn.com/astebner /Rarchive/2008/04/04/8358995.aspx

Voir "Comment installer le composant OS 3.0 OS .NET Framework 3.0 dans un scénario de déploiement". Il décrit en utilisant Ocsetup pour déclencher des fenêtres pour désactiver la fonctionnalité, autant que je sache. Bonne chance.

En outre, je suis curieux si les installateurs de ClickOnce sont intelligents pour savoir si la fonctionnalité est éteinte (j'imagine qu'ils seraient). Mais puisque vous utilisez InstallShield, vous voulez probablement un installateur plus complet que ClickOnce; o)


1 commentaires

La solution que j'ai mentionnée est pour .NET 3 mais je parie que vous pouvez utiliser la même approche pour 3.5.