gpt4 book ai didi

excel - Wix:如何将 .XLL 文件复制到与 Excel 版本相关的 Excel 公共(public) LIBRARY 文件夹?

转载 作者:行者123 更新时间:2023-12-03 01:00:57 25 4
gpt4 key购买 nike

我是 WiX 新手,正在尝试创建一个安装程序来分发我创建的一些 Excel 加载项(.XLL 文件)。

我现在知道如何将文件拖放到当前用户的 Excel 插件库文件夹中,该文件夹多年来一直是 %AppData%\Microsoft\AddIns,现在是操作系统版本。

但是,我还需要将几个 .XLL 文件复制(但激活)到 Excel 的通用/共享插件库文件夹,该文件夹与 Excel 版本相关。例如..\Office11\LIBRARY、..\Office14\LIBRARY 等

如何编写脚本以确保安装程序将 .XLL 文件正确复制到公共(public)/共享“OfficeXX\LIBRARY”文件夹,无论安装的 Excel 版本如何?

当我使用InstallShield时,我依赖于Excel自动化对象中的LibraryPath()函数,该函数可以直接从IS脚本访问。

在 WiX 中,我是否被迫创建自定义操作项目来访问 Excel 对象以读取库路径?

感谢您抽出时间。

最佳答案

无需自定义操作即可解决此问题,但如果您想支持许多不同版本的 Office,此解决方案最终可能会非常冗长。总体思路是使用 <RegistrySearch.../>将属性设置为特定版本的 Office 的位置。然后使用该属性作为目录位置和组件的条件。

一个稍微复杂的问题:用作 DirectoryDirectory 属性的属性元素应该是通过注册表搜索找到的属性的副本。如果我们尝试使用注册表搜索返回的相同属性,Directory element 会将属性设置为已解析的目录位置,这会将条件设置为 true 并无论如何安装组件。

<RegistrySearch.../>对于 Excel 2010:

<!-- Search for Excel 2010 -->
<Property Id="OFFICE14LOCATION">
<RegistrySearch Id="Office14Location"
Root="HKLM"
Key="SOFTWARE\Microsoft\Office\14.0\Excel\InstallRoot"
Name="Path"
Type="raw"/>
</Property>

<!-- Make a copy of the property for the directory reference -->
<SetProperty Id="Office14DirectoryPath" Value="[OFFICE14LOCATION]" Before="CostFinalize"/>

Excel 2010 的组成部分:

<!-- Conditionally install MyAddIn.xll to the Office14\Library directory 
Remember to reference Office14Library in a <Feature> -->
<DirectoryRef Id="Office14Library">
<Component Id="Office14AddIn" Guid="-- your GUID --">
<Condition>OFFICE14LOCATION</Condition>
<File Id="Office14AddIn" Name="MyAddIn.xll" Source="MyAddIn.xll" />
</Component>
</DirectoryRef>

Excel 2010 的目录部分:

<!-- Note: Include this as a child of <Directory Id="TARGETDIR" ..> -->
<Directory Id="Office14DirectoryPath" Name="Office14"> <!-- Note: The Name attribute is redundant but needed to avoid ICE30 warning -->
<Directory Id="Office14Library" Name="Library"/>
</Directory>

您需要为每个受支持的 Office 版本重复上述 block 。

Excel 2007

要支持 Excel 2007,您可以将上例中对 14 的引用更改为 12。例如:

<!-- Search for Excel 2007-->
<Property Id="OFFICE12LOCATION">
<RegistrySearch Id="Office12Location"
Root="HKLM"
Key="SOFTWARE\Microsoft\Office\12.0\Excel\InstallRoot"
Name="Path"
Type="raw"/>
</Property>

<!-- Make a copy of the property for the directory reference -->
<SetProperty Id="Office12DirectoryPath" Value="[OFFICE12LOCATION]" Before="CostFinalize"/>


<!-- Conditionally install MyAddIn.xll to the Office12\Library directory
Remember to reference Office12Library in a <Feature> -->
<DirectoryRef Id="Office12Library">
<Component Id="Office12AddIn" Guid="-- your GUID --">
<Condition>OFFICE12LOCATION</Condition>
<File Id="Office12AddIn" Name="MyAddIn.xll" Source="MyAddIn.xll" />
</Component>
</DirectoryRef>

<!-- Note: Include this as a child of <Directory Id="TARGETDIR" ..> -->
<Directory Id="Office12DirectoryPath" Name="Office12"> <!-- Note: The Name attribute is redundant but needed to avoid ICE30 warning -->
<Directory Id="Office12Library" Name="Library"/>
</Directory>

64 位 Excel 2010

该解决方案还可以扩展以支持 64 位版本的 Excel 2010:

<RegistrySearch.../>对于 64 位 Excel 2010:

<!-- Search for 64 bit Excel 2010 -->
<Property Id="OFFICE14LOCATIONX64">
<RegistrySearch Id="Office14LocationX64"
Root="HKLM"
Key="SOFTWARE\Microsoft\Office\14.0\Excel\InstallRoot"
Name="Path"
Win64="yes"
Type="raw"/>
</Property>

<!-- Make a copy of the property for the directory reference -->
<SetProperty Id="Office14DirectoryPathX64" Value="[OFFICE14LOCATIONX64]" Before="CostFinalize"/>

64 位 Excel 2010 的组件部分:

<!-- Conditionally install MyAddIn.xll to the Office14\Library directory 
Remember to reference Office14Library in a <Feature> -->
<DirectoryRef Id="Office14LibraryX64">
<Component Id="Office14AddInX64" Win64="yes" Guid="-- your GUID --">
<Condition>OFFICE14LOCATIONX64</Condition>
<File Id="Office14AddInX64" Name="MyAddIn.xll" Source="MyAddIn.xll" />
</Component>
</DirectoryRef>

64 位 Excel 2010 的目录部分:

<!-- Note: Include this as a child of <Directory Id="TARGETDIR" ..> -->
<Directory Id="Office14DirectoryPathX64" Name="Office14X64"> <!-- Note: The Name attribute is redundant but needed to avoid ICE30 warning -->
<Directory Id="Office14LibraryX64" Name="Library"/>
</Directory>

有用的引用: How to detect installed version of MS-Office? How do you copy a set of files to multiple places using Wix?

关于excel - Wix:如何将 .XLL 文件复制到与 Excel 版本相关的 Excel 公共(public) LIBRARY 文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29828041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com