【发布时间】:2014-02-28 23:02:38
【问题描述】:
我正在尝试将 Excel 插件部署到大众市场。该插件需要 VSTO 运行时 (vstor_redist.exe) 和 .NET 4.5(适用于 64 位操作系统)或 .NET 4.0(适用于 32 位操作系统)。我愿意假设潜在用户至少已经拥有 .NET 2.0。目前我的设置包括:
- 单独的 32 位和 64 位 WIX .msi 安装程序以每用户模式安装插件。
-
单独的 32 位和 64 位引导程序包,它们包装每个 .msi 并安装 VSTO 运行时和 .NET,如下面的代码所示:
<util:RegistrySearch Id="VSTORuntimeTest" Root="HKLM" Key="SOFTWARE\Microsoft\VSTO Runtime Setup\v4R\" Value="VSTORFeature_CLR40" Variable="VSTORFeature"/> <util:RegistrySearch Id="VSTORuntimeVersionV4R" Root="HKLM" Key="SOFTWARE\Microsoft\VSTO Runtime Setup\v4R\" Value="Version" Variable="VSTORVersionV4R"/> <util:RegistrySearch Id="VSTORuntimeVersionV4" Root="HKLM" Key="SOFTWARE\Microsoft\VSTO Runtime Setup\v4\" Value="Version" Variable="VSTORVersionV4"/> <Chain> <!-- Install .Net 4.0 or 4.5, depending on build --> <?ifdef x64?> <PackageGroupRef Id="NetFx45Web" /> <?endif ?> <?ifdef x86?> <PackageGroupRef Id="NetFx40Web" /> <?endif ?> <RollbackBoundary /> <!-- Install VSTO runtime --> <ExePackage Id="VSTORuntime" SourceFile="..\resources\vstor_redist.exe" Permanent="yes" Vital="yes" Cache="no" Compressed="no" DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=158917" PerMachine="yes" InstallCommand="/q /norestart" DetectCondition="VSTORFeature" InstallCondition="NOT VSTORFeature OR NOT (VSTORVersionV4R >=v10.0.40303) OR NOT (VSTORVersionV4 >=v10.0.21022)" /> <RollbackBoundary /> <?ifdef x64?> <MsiPackage Id="nx_msi_package_version" SourceFile="..\My 64 bit Setup.msi" Compressed="yes" Vital="yes" /> <?endif ?> <?ifdef x86?> <MsiPackage Id="nx_msi_package_version" SourceFile="..\My 32 bit Setup.msi" Compressed="yes" Vital="yes" /> <?endif ?> </Chain> 一个 .NET 2.0 包装器,其中包括作为嵌入式资源的引导程序,并为客户端操作系统部署和运行正确的引导程序。 (基本上是 Yochai Timmer 在Single MSI to install correct 32 or 64 bit c# application 中的回答)
整个事情感觉就像一个土鸡,但是当用户拥有管理员凭据时,它可以很好地用于静默升级和全新安装。但是,如果用户不是管理员并且还没有安装 VSTO 和适当的 .NET,那么它会在长时间下载后不正常地失败并出现错误:“0x8007051b - 此安全 ID 可能未分配为对象的所有者”过程。
我想做的是提前检查用户是否需要要求管理员干预并为他们安装 VTSO 和/或 .NET,并显示一条消息,最好是带有网站链接,当这是案子。这个检查可以在引导程序中,也可以在我的 .NET 2.0 包装器中。关于如何最好地做到这一点的任何建议?
谢谢,埃里克
【问题讨论】: