2017-05-25 209 views
1

在安装Visual Studio 2017时出现问题Microsoft建议我运行InstallCleanup.exe -full此命令从我的计算机中删除了Visual Studio 2017和Visual Studio安装程序,但在此过程中出现了一些问题。Visual Studio 2017安装程序TypeInitializationException

现在,当我尝试安装Visual Studio 2017时,Visual Studio 2017安装程序会在我选择要安装的Visual Studio版本时引发TypeInitializationException。

Exception

日志文件显示以下堆栈跟踪:

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

不幸的是我已经无法纠正。我已经重新下载安装程序。卸载并删除任何与VS2017相关的,重新启动,清理临时文件夹。似乎没有任何影响。

我已经要求微软提供指导here,但是两个类似的错误报告herehere没有得到答复,所以我没有什么希望。

我会看看StringUtility类似乎导致问题的源代码。但我不相信这是开源的。 (我无法在参考资源上找到类似的课程)。我也会尝试通过附加一个调试器来调试正在运行的应用程序,但是,我没有Visual Studio,无法安装新的。

有没有人有任何线索我可以尝试找出导致此异常的原因?或者我可以检查哪些依赖关系?

编辑:使用Collect.exe收集更多的信息后,我发现的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 

看起来有一些sheneningans一个无效的路径?但是,我将如何找出什么路径:)?

回答

1

经过一天的搜索,我找到了答案。

注意堆栈跟踪如何包含此行

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

所以无效的文件夹是windows特殊文件夹中的一个。其中只有少数。使用Powershell脚本,我测试了所有特殊文件夹。然后我注意到下面的PowerShell命令抛出了一个非常类似的异常。

[environment]::GetFolderPath("MyVideos") 

进一步挖掘我发现下面的注册表项: enter image description here

注意失踪\应该D:\Videos\D:Videos我手工编辑这个前一阵子。该路径似乎在某些Windows功能中有效。但不在.Net功能中。

我删除了库,然后恢复默认值。 (右键单击库窗格中的库以将其删除。然后右键单击库图标并选择恢复默认值。)

后重新启动(没有它它不会工作)PS脚本显示特殊文件夹路径工作。瞧! Visual Studio安装程序也再次工作:D。

相关问题