【问题标题】:Visual Studio 2017 Installer TypeInitializationExceptionVisual Studio 2017 安装程序 TypeInitializationException
【发布时间】:2017-05-25 18:40:23
【问题描述】:

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

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

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

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 相关的任何内容,重新启动,清理临时文件夹。似乎没有任何影响。

我已向 Microsoft 寻求指导 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 的路径无效?但是我将如何找出路径:)?

【问题讨论】:

    标签: visual-studio installation visual-studio-2017


    【解决方案1】:

    经过一天的搜索,我想通了。

    注意堆栈跟踪是如何包含这一行的

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

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

     [environment]::GetFolderPath("MyVideos")
    

    进一步挖掘,我发现了以下注册表项:

    注意缺少的\ 它应该是D:\Videos\ 而不是D:Videos 我不久前手动编辑了这个。该路径似乎在某些 Windows 函数中有效。但不在 .Net 函数中。

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      相关资源
      最近更新 更多