Visual Studio 2015企业版离线安装失败

时间:2015-09-15 15:37:53

标签: visual-studio visual-studio-2015

我试图评估Visual Studio 2015 Enterprise,但在安装过程中遇到了一些问题。这就是我的所作所为:

  1. 使用/layout开关下载完整安装。
  2. 使用/NoWeb开关启动安装。
  3. 我正在使用干净的Windows 8.1虚拟机来实现此目的,以免弄乱我的主机系统。虚拟机未连接到网络。

    安装失败,日志中包含以下条目:

    MUX:  ExecuteError: Package (VSSecondaryInstaller_box) failed: Error Message Id: 1603 ErrorMessage: Visual Studio Extensibility Item Templates with Assembly References in Nuget Packages : This product did not download successfully: Unable to download 'http://go.microsoft.com/fwlink/?LinkId=558768'.  Web downloads are not allowed when the /NoWeb switch is used.
    MUX:  ExecuteError: Package (VSSecondaryInstaller_box) failed: Error Message Id: 1603 ErrorMessage: GitHub Extension for Visual Studio : This product did not download successfully: Unable to download 'http://go.microsoft.com/fwlink/?LinkId=616986'.  Web downloads are not allowed when the /NoWeb switch is used.
    MUX:  ExecuteError: Package (VSSecondaryInstaller_box) failed: Error Message Id: 1603 ErrorMessage: PowerShell Tools for Visual Studio : This product did not download successfully: Unable to download 'http://go.microsoft.com/fwlink/?LinkID=616995'.  Web downloads are not allowed when the /NoWeb switch is used.
    

    我注意到这些是安装程序中唯一的VSIX软件包。当然,我可以手动安装这些软件包,但我想了解这个错误的原因。

    有什么想法吗?

3 个答案:

答案 0 :(得分:8)

简介

嗯,一周后我发现了它,我有一个解决方案。请记住,如果Microsoft决定更新其安装程序,这有点麻烦,可能会失败。

但首先,我们必须了解问题的根源。

问题

正如我在问题中提到的,安装日志指出由于/noweb开关而无法下载VSIX软件包。此时一个合理的问题是安装程序首先尝试下载它们的原因。

要回答这个问题,我们必须查看dd_vs_enterprise_<timestamp>_SecondaryInstaller_UX.log目录中的辅助安装程序日志(%temp%)。据我了解,辅助安装程序负责安装Visual Studio附带的所有额外软件包。这个日志稍微澄清了一下。

DownloadManager Information: 0 : Using cached file at C:\ProgramData\Microsoft\VisualStudioSecondaryInstaller\14.0\installers\VS_Extensibility_TemplatesV1\en\0\Microsoft.Vsix.TemplatesPackage.vsix instead of downloading from http://go.microsoft.com/fwlink/?LinkId=558768
DownloadManager Error: 0 : Signature verification failed on downloaded file. URL: http://go.microsoft.com/fwlink/?LinkId=558768. File location: C:\ProgramData\Microsoft\VisualStudioSecondaryInstaller\14.0\installers\VS_Extensibility_TemplatesV1\en\0\Microsoft.Vsix.TemplatesPackage.vsix. File size: 3965 kb
DownloadManager Error: 0 : BITS download failed. Exception: System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.Web.PlatformInstaller.InstallManager.BITSDownloadInstallerFile(InstallerContext currentInstall, String& failureReason, String& failureErrorCode, Boolean& downloadNotAllowed, Boolean setFinalReturnState)
DownloadManager Warning: 0 : BITS failure: BITS download failed. BITS service may have been disabled on the machine.. Retrying download for 'Visual Studio Extensibility Item Templates with Assembly References in Nuget Packages'
DownloadManager Warning: 0 : WinInet failure: Unable to download 'http://go.microsoft.com/fwlink/?LinkId=558768'.  Web downloads are not allowed when the /NoWeb switch is used.. Retrying download for 'Visual Studio Extensibility Item Templates with Assembly References in Nuget Packages'
DownloadManager Information: 0 : WebClient downloading file 'http://go.microsoft.com/fwlink/?LinkId=558768' to: C:\Users\John Gallegos\AppData\Local\Temp\evlyeg3i.fmr
DownloadManager Error: 0 : WebClient error while downloading file 'http://go.microsoft.com/fwlink/?LinkId=558768'. Exception: System.Net.WebException: The remote name could not be resolved: 'go.microsoft.com'
   at System.Net.WebClient.OpenRead(Uri address)
   at Microsoft.Web.PlatformInstaller.InstallManager.WebClientDownloadInstallerFile(InstallerContext currentInstall, String& errorMessage, Boolean setFinalReturnState)
DownloadManager Warning: 0 : WebClient failure: The remote name could not be resolved: 'go.microsoft.com'. Retrying download for 'Visual Studio Extensibility Item Templates with Assembly References in Nuget Packages'
DownloadManager Warning: 0 : WinInet failure: Unable to download 'http://go.microsoft.com/fwlink/?LinkId=558768'.  Web downloads are not allowed when the /NoWeb switch is used.. Retrying download for 'Visual Studio Extensibility Item Templates with Assembly References in Nuget Packages'
DownloadManager Error: 0 : BITS failure: Unable to download 'http://go.microsoft.com/fwlink/?LinkId=558768'.  Web downloads are not allowed when the /NoWeb switch is used.. Download failure for Visual Studio Extensibility Item Templates with Assembly References in Nuget Packages.

那更像是它!现在我们知道失败的真正原因是VSIX上的签名验证!我们现在可以重建事件链:

  1. 安装程序尝试验证VSIX上的签名,但失败。
  2. 安装程序继续从Internet下载VSIX软件包。这里的基本原理可能是签名验证失败,因为缓存的VSIX已损坏,因此再次下载是唯一的解决方案。
  3. 当然,安装程序再次失败,因为我们不允许所有下载。
  4. 但有趣的是,在连接到互联网的机器上,这根本不会发生!即使指定了/noweb开关!

    寻找答案

    为什么安装在联网计算机上成功,即使不允许所有下载?当它无法使用本地可用的证书验证信任时,操作系统的信任验证组件似乎会进入Internet。

    微软有一篇关于VS 2015已知问题和修复错误(右here)的知识库文章,似乎支持我的理论。这是文章所说的内容:

      

    如果未将Windows Update选项设置为自动更新   根证书,您选择安装可选组件,   您收到以下Visual Studio安装程序警告结束时   过程:

         

    PowerShell Tools for Visual Studio: This product did not download successfully: Signature verification failed on downloaded file.

         

    如果关闭自动更新,则计算机不会   拥有最新的根证书。因此,Visual Studio安装程序将   无法识别用于将VSIX文件签名的证书   有效的证书,不会安装组件。

    起初,我以为我找到了我想要的东西。我们所要做的就是获得正确的证书,并完成它!但你是怎么做到的?

    在联网计算机上成功安装VS 2015之前和之后安装的证书(使用certmgr.msc)的差异提供了几个似乎是我的麻烦的证书。但是,在断开连接的计算机上手动安装它们不会产生任何结果。您可以在主题上看到我的question,但它与安装没有关系:当我尝试在Windows 10上安装时发生了同样的事情。

    也许问题更广泛?过去,Microsoft提供了可以在脱机计算机上安装的根证书更新包(rootsupd.exe)。虽然最新的软件包甚至可以在Windows 8.1上安装,但它不包括我知道需要的证书。因此,我一直在寻找在断开连接的计算机上安装证书更新的替代方法。

    Microsoft在this TechNet文章中介绍了这样做的推荐方法。因为我没有Windows Server计算机,所以我尝试手动应用所需的注册表更改,但无济于事。

    Visual Studio forums也没有提供太多帮助。

    但是,在一个突然清晰的时刻,我心想:如果我可以完全避免这个问题怎么办?如果不是试图让VSIX上的证书验证,我可以用自己的证书替换那些证书怎么办?毕竟,我处于断开连接的环境中,因此信任不是问题。< / p>

    解决方案

    使用vsixsigntool.exe可用here来签署VSIX包。幸运的是,可以将已签名的VSIX提供给此实用程序,它将使用您指定的证书替换嵌入的证书。一块蛋糕!

    嗯,不完全是。这种方法存在两个问题:

    1. 证书的主题必须是CN = Microsoft Corporation。为什么?安装程序使用特殊的XML&#34; feed&#34;它描述了它可用的不同组件(查看OfflineCache\feeds目录)。安装VSIX软件包时,它会验证嵌入式证书的主题是否与XML Feed中指定的主题相匹配。 XML feed也已签名,因此很有趣。
    2. 特殊文件cache.bin为安装程序提供查找程序包缓存版本所需的信息(例如,请参阅OfflineCache\installers\VS_Extensibility_TemplatesV1\cache.bin)。问题是,该文件包含包的SHA256哈希。该文件实际上只是一个序列化的.NET对象,但是如果不访问包含序列化对象类的程序集及其成员的类,我们就无法对其进行反序列化。此外,这不是真正的程序员这样做的方式!哈希值存储为一个简单的ASCII字符串,所以它只是一个搜索&amp;替换。
    3. 那就是它!使用此方法,我们可以重新签名所有VSIX包,将使用的证书导入受信任的根证书颁发机构存储区,并将Bob的叔叔导入。

      代码

      我编写了一个执行上述所有操作的脚本。它可用here。玩得开心!

答案 1 :(得分:2)

发生此问题是因为计算机需要为这些文件使用的每个证书提供更新的证书吊销列表。如果未安装最新的CRL,则需要使用互联网进行检查。

随着Update 2的发布,Microsoft从Visual Studio更新了辅助安装程序,如果计算机处于脱机状态,则不检查VSIX扩展的证书吊销列表。这解决了本主题中描述的问题。

他们最近还在https://msdn.microsoft.com/en-us/library/mt706497.aspx发布了一篇文章,其中包含有关离线安装的说明。 “离线安装疑难解答”部分包含的信息可帮助您在创建布局时使用特殊Feed解决脱机安装问题。

答案 2 :(得分:0)

先生。 Anderson Cassimiro的回答为我提供了一些关于如何解决由证书验证错误引起的离线安装问题的线索。

<强>内容: 基本上,我必须获得最新的证书撤销列表的副本并将其安装在我的离线系统上:

http://crl.microsoft.com/pki/crl/products/MicCodSigPCA_08-31-2010.crl

http://www.microsoft.com/pkiops/crl/MicCodSigPCA2011_2011-07-08.crl

http://crl.microsoft.com/pki/crl/products/MicrosoftTimeStampPCA.crl

http://crl.microsoft.com/pki/crl/products/MicTimStaPCA_2010-07-01.crl

http://crl.microsoft.com/pki/crl/products/CSPCA.crl

http://crl.microsoft.com/pki/crl/products/tspca.crl

http://crl.comodoca.com/COMODOCodeSigningCA2.crl

http://crl.comodoca.com/COMODORSACodeSigningCA.crl

http://crl.usertrust.com/UTN-USERFirst-Object.crl

http://crl.microsoft.com/pki/crl/products/MicCodSigPCA_2010-07-06.crl

http://ts-crl.ws.symantec.com/tss-ca-g2.crl

有两个软件包,无论安装了哪个CRL,我都无法获得证书验证:

sqlcmdlnutils_amd64 \ SqlCmdLnUtils.msi

Dotfuscator的

您可以在安装VS 2012之后安装这些文件,方法是直接访问这些工具的软件包文件夹并进行安装。

CRL可能在24小时内有效,或者您的CRL缓存超时设置为。因此,如果您需要在几天后在其他系统上安装,则必须在另一个系统上下载并安装最新的CRL。

我写下了我在下面进行的更长时间的故障排除步骤。

症状: Visual Studio安装程序指示无法安装一个或多个程序包,并要求您指定程序包可执行文件的位置。您可以在安装介质的packages目录中指定位置,但它会再次提示您。

步骤1:确定它是否是证书问题

您可以右键单击Visual Studio可执行文件,然后单击“属性”。在“数字签名”选项卡下,选择其中一个签名,然后单击“详细信息”。

在数字签名信息下,如果它没有说&#34;此数字签名是正常的。&#34;然后,它可能是一个签名问题。

此外,您可以在c:\ Users [username] \ AppData \ Local \ Temp目录中检查名为dd_vs_professiona_ [Timestamp] .log的文件,并注意日志中存在证书验证错误。

第2步:修复证书问题

<强>一个。如果错误表明证书不受信任:

Ensure that all the certificates from the digital signature are trusted.

1) Launch the Certificates MMC for your local computer by:
  -Open command prompt as admin and type mmc and enter.
  -File -> Add Remove SnapIn
  -Select Certificates and click add
  -Select Computer Account and click Next.  
  -Select Local Computer and click Finish.

2)返回Visual Studio可执行文件对话框。

单击Visual Studio可执行文件,然后单击“属性”。在“数字签名”选项卡下,选择其中一个签名,然后单击“详细信息”。

单击“查看证书”。单击“证书路径”选项卡。

3)如果证书路径中存在不受信任的证书,请单击它,然后单击“查看证书”。单击详细信息,然后单击复制到文件将证书保存到您可以轻松找到的位置。

4)返回证书MMC。导航到受信任的根证书。右键单击 - &gt;所有任务 - &gt;导入

5)将刚保存的证书导入文件。

您必须对证书路径中的所有证书执行此操作。

<强>湾如果错误表明无法验证CRL。

单击Visual Studio可执行文件,然后单击“属性”。在“数字签名”选项卡下,选择其中一个签名,然后单击“详细信息”。

1. Click View Certificate
2. Under Details Tab -> Click CRL Distribution Points
3. Download the crl from the URL specified in the CRL Distribution Points.
4. Copy the file to your offline system.
5. Right click on it and Click Install CRL, Next, Next, Finish.

请参阅上面的摘要部分,了解我必须下载的CRL列表。

<强>℃。如果错误指示&#34;其中一个副签名无效。该文件可能已被更改。&#34;,然后:

单击Visual Studio可执行文件,然后单击“属性”。 单击“数字签名”。单击签名,然后单击“详细信息”。

  • 单击“计数器签名”部分下的“时间戳”,而不是单击“查看数字签名证书”。

单击“详细信息”,然后单击“查看证书”以获取时间戳证书 - 在“详细信息”选项卡中单击CRL分发点

- 下载时间戳crl。 - 将其复制到离线系统并右键单击crl文件并安装crl,Next,Next,Finish。

请参阅上面的摘要部分,了解我必须下载的CRL列表。