VSTO установить пакет Как проверить предварительные условия и пропустить их - PullRequest
2 голосов
/ 09 июня 2010

Я создал проект установки для своего проекта надстройки Excel в соответствии со статьей:

Развертывание средств Visual Studio для решения Office System 3.0 для выпуска 2007 системы Microsoft Office с помощью установщика Windows

http://msdn.microsoft.com/en-us/library/cc563937(office.12).aspx

Я добавляю предварительные требования, такие как сборки Interop 2007 (Office2007PIA) и когда Я запускаю мой установочный файл, он устанавливает его. Но проблема в следующем: Что моя установка ВСЕГДА устанавливает его, даже если мой компьютер уже имеет Office2007PIA.

Как я могу настроить свой проект установки, чтобы он сначала проверил, Office2007PIA установлен и продолжаю установку моего проекта без установки Office2007PIA?


Вот код из «c: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v6.0A \ Bootstrapper \ Packages \ Office2007PIA \ en \ package.xml»:

<Package
  xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
  Name="DisplayName"
  Culture="Culture"
>

  <!-- Defines a localizable string table for error messages. -->
  <Strings>
    <String Name="DisplayName">2007 Microsoft Office Primary Interop Assemblies</String>
    <String Name="Culture">en</String>
    <String Name="AdminRequired">Administrator permissions are required to install the 2007 Microsoft Office Primary Interop Assemblies. Contact your administrator.</String>
    <String Name="GeneralFailure">A failure occurred attempting to install Microsoft Office 2003 primary interop assemblies.</String>
  </Strings>
</Package>

А вот код из "c: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v6.0A \ Bootstrapper \ Packages \ Office2007PIA \ en \ package.xml" "c: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v6.0A \ загрузчик \ Packages \ Office2007PIA \ product.xml ":

<Product
  xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
  ProductCode="Microsoft.Office.PIA.2007"
  >

  <RelatedProducts>
    <DependsOnProduct Code="Microsoft.Net.Framework.2.0" />
  </RelatedProducts>

  <!-- Defines the list of files to be copied on build. -->
  <PackageFiles>
    <PackageFile Name="o2007pia.msi"/>
    <PackageFile Name="ComponentCheck.exe"/>
  </PackageFiles>

  <InstallChecks>
     <ExternalCheck 
      Property="Office2007Exists" 
      PackageFile="ComponentCheck.exe" 
      Arguments="{0638C49D-BB8B-4CD1-B191-050E8F325736}"/>
  </InstallChecks>

  <!-- Defines how to run the Setup package. -->
  <Commands Reboot="Defer">

    <Command PackageFile="o2007pia.msi" 
      Arguments=""
      EstimatedInstalledBytes="30000000" 
      EstimatedInstallSeconds="60"
      >

      <InstallConditions>
        <BypassIf Property="Office2007Exists" Compare="ValueNotEqualTo" Value="0" />
        <FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired"/>
      </InstallConditions>

      <ExitCodes>
        <ExitCode Value="0" Result="Success"/>
        <ExitCode Value="1641" Result="SuccessReboot"/>
        <ExitCode Value="3010" Result="SuccessReboot"/>
        <DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" />
      </ExitCodes>
    </Command>
  </Commands>
</Product>

Полагаю, вы имеете в виду, что в product.xml отсутствует код (в узле InstallConditions ):

<BypassIf Property="PIAInstallAction" Compare="ValueNotEqualTo" Value="0" />

1 Ответ

0 голосов
/ 09 июня 2010

Я предполагаю, что установка не выполняется с правами администратора, поскольку это является обязательным требованием при установке сборок в GAC.

Если вы хотите копнуть глубже, вы можете проанализировать процесс запуска установки PIA.:

Установлен ли Office PIA, определяется небольшим исполняемым файлом, включенным в загрузчик установки, который проверяет, действительно ли PIA присутствует на диске.

Исполняемый файл называется ComponentCheck.exe и обычно находится в

C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Bootstrapper \ Packages \ Office2007PIARedist

Я предлагаю вамзапустите эту программу и проверьте с помощью Process Monitor, не происходит ли что-нибудь не так.На основе кода выхода ComponentCheck.exe установка PIA инициирована или нет.

Это условие кода выхода указано в файле package.xml вта же папка:

<InstallConditions>
 <BypassIf Property="PIAInstallAction" Compare="ValueNotEqualTo" Value="0" /> 
   <!-- Requires the user to be an admin user when installing the prerequisite --> 
   <FailIf Property="AdminUser" Compare="ValueEqualTo" 
           Value="false" String="AdminRequired" /> 
</InstallConditions>
...