我根据文章
为我的Excel加载项目创建了安装项目使用Windows Installer为2007 Microsoft Office System的Office System 3.0解决方案部署Visual Studio工具
http://msdn.microsoft.com/en-us/library/cc563937(office.12).aspx
我添加了先决条件,例如2007 Interop程序集(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 \引导程序\软件包\ 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" />
答案 0 :(得分:0)
我的猜测是安装没有使用管理权限,因为这是将程序集安装到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>