2017-05-25 5 views
1

Après avoir rencontré un problème avec mon installation de Visual Studio 2017 Microsoft m'a recommandé d'exécuter InstallCleanup.exe -full cette commande a supprimé Visual Studio 2017 et le programme d'installation de Visual Studio de mon ordinateur mais dans le processus a cassé quelque chose.Programme d'installation de Visual Studio 2017 TypeInitializationException

Maintenant, lorsque j'essaie d'installer Visual Studio 2017, le programme d'installation de Visual Studio 2017 lève une exception TypeInitializationException chaque fois que je sélectionne une version de Visual Studio à installer.

Exception

Le fichier journal affiche la trace de la pile suivante:

2017-05-25T17:19:18 : Verbose : Getting product. [installerId: SetupEngine, productId: Microsoft.VisualStudio.Product.Community]. 
2017-05-25T17:19:21 : Error : Failed to get product. [installerId: SetupEngine, productId: Microsoft.VisualStudio.Product.Community, error: TypeInitializationException at The type initializer for 'Microsoft.VisualStudio.Setup.Utility.StringUtility' threw an exception. 
    at Microsoft.VisualStudio.Setup.Utility.StringUtility.ReplaceSpecialFolders(String value) 
    at Microsoft.VisualStudio.Setup.Utility.StringUtility.ReplaceVariables(String value, IEnumerable`1 parameters) 
    at Microsoft.VisualStudio.Setup.ProductInstaller.GetSerializableProduct() 
    at Microsoft.VisualStudio.Setup.ProductsProviderService.GetProduct(String channelId, String productId)] 

Malheureusement, je n'ai pas pu corriger. J'ai téléchargé le programme d'installation. désinstallé et supprimé tout ce qui concerne VS2017, redémarré, nettoyé le dossier temp. Rien ne semble avoir d'effet.

J'ai demandé à Microsoft des conseils here, mais deux rapports de bogues similaires here et here restent sans réponse, donc j'ai peu d'espoir.

Je regarderais le code source de la classe StringUtility qui semble causer le problème. Mais je ne crois pas que ce soit open source. (Je n'ai pas pu trouver un cours similaire sur referencesource). Je voudrais aussi essayer de déboguer l'application en cours d'exécution en attachant un débogueur, mais hélas je n'ai pas Visual Studio et ne peut pas installer un nouveau :).

Est-ce que quelqu'un a la moindre idée comment je pourrais essayer de comprendre ce qui cause cette exception? Ou quelles dépendances je pourrais vérifier?

Edit: après avoir utilisé Collect.exe pour recueillir plus d'informations que j'ai trouvé le InnerException:

05/25/2017 17:55:17 : Error : System.TypeInitializationException: The type initializer for 'Microsoft.VisualStudio.Setup.Utility.StringUtility' threw an exception. ---> System.ArgumentException: Absolute path information is required. 
    at System.Security.Util.StringExpressionSet.CreateListFromExpressions(String[] str, Boolean needFullPath) 
    at System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList) 
    at System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, String path) 
    at System.Environment.InternalGetFolderPath(SpecialFolder folder, SpecialFolderOption option, Boolean suppressSecurityChecks) 
    at Microsoft.VisualStudio.Setup.Utility.StringUtility..cctor() 
    --- End of inner exception stack trace --- 
    at Microsoft.VisualStudio.Setup.Utility.StringUtility.ReplaceSpecialFolders(String value) 
    at Microsoft.VisualStudio.Setup.Utility.StringUtility.ReplaceVariables(String value, IEnumerable`1 parameters) 
    at Microsoft.VisualStudio.Setup.ProductInstaller.GetSerializableProduct() 
    at Microsoft.VisualStudio.Setup.ProductsProviderService.GetProduct(String channelId, String productId)Failed to get a catalog 

On dirait qu'il est quelques sheneningans avec un chemin non valide? Mais comment vais-je savoir quel chemin :)?

Répondre

1

Après une journée de recherche, je compris.

Remarquez que la trace de la pile comprend cette ligne

at System.Environment.InternalGetFolderPath(SpecialFolder folder, SpecialFolderOption option, Boolean suppressSecurityChecks) 

Ainsi, le dossier non valide est l'un des dossiers Windows spéciaux. De qui il n'y a que quelques-uns. Avec un script Powershell, j'ai testé tous les dossiers spéciaux. J'ai alors remarqué que la commande powershell suivante a présenté une exception très similaire.

[environment]::GetFolderPath("MyVideos") 

Creuser plus loin, je trouve la clé de Registre suivante: enter image description here

Notez le \ manquant, il devrait être D:\Videos\ pas D:Videos manuellement ce que j'édité il y a un certain temps. Le chemin semble être valide dans certaines fonctions de Windows. Mais pas dans la fonction .Net. J'ai supprimé la bibliothèque et restauré les paramètres par défaut. (Cliquez avec le bouton droit de la souris sur la bibliothèque dans le volet de la bibliothèque pour le supprimer, puis cliquez avec le bouton droit de la souris sur l'icône de la bibliothèque et choisissez Restaurer les valeurs par défaut.

Après redémarrage (sans cela, cela ne fonctionnerait pas) Le script PS a montré que le chemin du dossier spécial a fonctionné. Et voilà! le programme d'installation de Visual Studio a également fonctionné à nouveau: D.