Я пытаюсь развернуть подключаемый модуль Excel на массовый рынок. Плагин требует VSTO runtime (vstor_redist.exe) и .NET 4.5 (для 64-разрядной ОС) или .NET 4.0 (для 32-разрядной ОС). Я готов предположить, что у потенциальных пользователей уже есть как минимум .NET 2.0. В настоящее время моя установка состоит из:WIX Установите .NET и VSTO, если администратор, не работает раньше, если не администратор
- Отдельные 32-разрядные и 64-разрядные установщики WIX .msi, которые устанавливают плагин в режиме для каждого пользователя.
Отдельные 32 бит и 64 бит пучки Bootstrapper, которые обертка каждый .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 обертку, которая включает в себя как bootstrappers как встроенные ресурсы и развертывания & запускает правильный загрузочный файл для клиентской ОС. (По существу, ответ Йохай Timmer в Single MSI to install correct 32 or 64 bit c# application)
Все это чувствует, как turducken, но он прекрасно работает как для тихих обновлений и свежей устанавливает, когда пользователь имеет администратора учетные данные. Но если пользователь не является администратором и еще не имеет как VSTO, так и соответствующий .NET, он с ошибкой несется с ошибкой: «0x8007051b - этот идентификатор безопасности не может быть назначен как владелец объекта» после долгой загрузки обработать.
Что я хотел бы сделать, так это заранее проверить, должен ли пользователь запрашивать у администратора вмешательство и установку VTSO и/или .NET для них и отображать сообщение, в идеале, с ссылками на сайты, когда это это так. Эта проверка может быть в загрузчике или в моей оболочке .NET 2.0. Любая рекомендация о том, как лучше всего это сделать?
Спасибо, Эрик