- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 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 的位置。然后使用该属性作为目录位置和组件的条件。
一个稍微复杂的问题:用作 Directory 的 Directory 属性的属性元素应该是通过注册表搜索找到的属性的副本。如果我们尝试使用注册表搜索返回的相同属性,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/
我正在使用 ExcelDna 和 NetOffice 为 Excel 构建插件。 Excel 中的插件可以安装并包含在每个 Excel session 中,也可以通过打开 xll 文件临时打开。 我有
我用 XLW 创建 *.xll库。但它仅适用于构建计算机。如果我在其他计算机上重建我的项目,xll 可以在它上面工作,但不是我的计算机。任何人都有这个问题的想法。 最佳答案 这听起来像是一个经典案例,
我已经在 SO 上查看了许多有关 XLL 和数组的线程,但我现在比以往任何时候都更加困惑。抱歉,如果以下内容完全是菜鸟,但这就是我来这里的原因...... 有人告诉我,不可能编写可以返回任意数据数组的
我编写了一个包含菜单的小型 XLL 插件 (VS2010 VC++/Excel 2007)。它已正确注册(使用加载项管理器查看),但当我打开 Excel 工作簿(.xlsb)时,菜单未显示。每次打开工
我正在尝试为 xll 格式的 Excel 加载项自动执行一些测试。我在加载 xll 时遇到了一些问题。我正在用 C# 编写它,我的代码如下所示: using Microsoft.Office.Inte
我习惯了this使用 C++ 为 Excel 构建 XLL 的示例。我创建了自己的函数,它接受 2 个双参数并返回字符串: __declspec(dllexport) LPXLOPER12 WINA
使用 Excel 的 C API 创建 XLL 时,如何指定返回范围的 XLL 中定义的工作表函数应该溢出? 我知道在使用 xlfRegister 注册函数时,我可以通过指定“Q”作为返回类型来返回一
我们有一个我们在 excel 中注册的第 3 方 excel 插件。现在,我们如何查看该 .xll 中可用的所有函数和方法列表。 另外,我们可以看到 .xll 文件中的 vba 代码吗? 我正在使用
如何以编程方式注册 XLL 插件? 最佳答案 Application.RegisterXLL为我工作 关于excel - 如何以编程方式注册 XLL 插件?,我们在Stack Overflow上找到一
Excel“日期”是引擎盖下的 double ,XLOPER结构似乎没有任何日期概念,只有xltypeNum(与VBA中的变体不同)。 我有一个简单的 XLL,其函数不接受任何参数,将今天的日期作为
我有一个 xll(一个相当复杂的 c++ 项目)导出一个函数,由于历史原因,该函数采用大量参数,恰好是 20。 这是一个神奇的数字:显然在 Excel 2003 中参数的最大数量为 30(“在 Mic
我是编写 XLL 的新手,有人知道如何将 6x1 数组返回到 Excel 吗? 以下是我的函数(部分代码来自其他帖子): __declspec(dllexport) LPXLOPER12 WINAP
基本上试图在 C++ 中复制以下 VBA 代码 I don't want my Excel Add-In to return an array (instead I need a UDF to cha
我有一个 Excel XLL 插件,它会导致某些计算机上的 Excel 崩溃。为了排除故障,我在 DllMain 中添加了此调用: SetUnhandledExceptionFilter(MyExce
是否可以在没有原始源代码的情况下查看 XLL Excel 插件的源代码?我猜测这个 XLL 是用 C# 编写的,但不确定。 IE。可以使用 dotPeek 反编译的 .NET DLL,或者可以通过 D
我使用的是 Excel 2010 和 Excel 2010 XLL SDK。我尝试使用此功能: __declspec(dllexport) LPXLOPER12 WINAPI dfutil(void)
我有一个用于 Excel 的 C++ .xll 插件。以下测试工作表函数在加载的 xll 下运行良好: LPXLOPER __stdcall Test() { return &xlstring
在 XLW library 的帮助下,我正在使用 C++ 为 Microsoft Excel 编写一个 .XLL 插件.我的操作系统是windows 7 64位版本,内存32GB;但我的 Excel
我用 visual studio 2010 和 excel 2010 开发了一个 xll。它在安装了 visual 的计算机上的 excel 上运行良好。但是现在,我正尝试在未安装 visual 的计
任何人都可以给我一些链接或解释如何从 DLL 构建 XLL(用于 Excel)吗? 我不能使用 Visual C++,所以我依赖 CodeBlocks + GCC。 到目前为止,我已经有了源代码并从中
我是一名优秀的程序员,十分优秀!