开发者

VSTO install package How to check for prerequisites and skip them

I created Setup project for my Excel add-in project according to the article:

Deploying a Visual Studio Tools for the Office System 3.0 Solution for the 2007 Microsoft Office System Using Windows Installer

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

I add prerequisites such as 2007 Interop assemblies(Office2007PIA) and when I run my setup file it does install it. But the problem is : That my setup ALWAYS installs it even if my computer already has Office2007PIA.

开发者_如何转开发How can I configure my setup project that it will first check if Office2007PIA is installed and continue the installation of my project without installing Office2007PIA?


Here is the code from "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>

And here is the code from "c:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\Office2007PIA\en\package.xml" "c:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Bootstrapper\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>

I suppose you mean product.xml is missing code (in node InstallConditions):

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

?


My guess is that the installation is not done with administrative permissions as this is a requirement when installing assemblies to the GAC.

If you want to dig deeper you can analyze the process how the PIA installation is triggered:

Whether the Office PIA are installed is determined by a small executable included in the setup bootstrapper that checks if the PIA are actually present on disc.

The executable is named ComponentCheck.exe and is typically located under

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

I suggest you run this program and check with Process Monitor whether anything fails. Based on the exit code of ComponentCheck.exe the installation of the PIAs is triggered or not.

This exit code condition is specified in the file package.xml in the same folder:

<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>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜