求助:用WiX3.1打包C#+Excel-DNA开发的Excel自定义函数步骤
嘿,我之前帮团队打包过Excel-DNA开发的UDF用于企业内部部署,踩过不少WiX的坑,给你整理了一套一步步的流程,照着来应该能搞定:
一、先做好准备工作
- 确认你已经安装了WiX 3.11(3.1版本偏老,建议升级到3.11兼容性更好,若必须用3.1也可以,步骤差异不大)
- 梳理项目输出文件,统一放到一个
Output目录方便引用:- 核心的
你的项目名.xll文件 - 所有依赖DLL(比如Excel-DNA自带的
ExcelDna.Integration.dll、ExcelDna.Loader.dll,以及你自己引用的其他类库) - 区域性资源文件夹(比如
zh-CN、en-US,每个文件夹内的.resources.dll文件)
- 核心的
二、创建WiX安装项目
- 在Visual Studio里新建WiX Setup Project(如果看不到模板,先安装WiX的VS扩展)
- 右键项目 -> Add -> Item,添加
Product.wxs文件(默认会生成基础结构,后续调整内容即可)
三、编写核心WiX脚本(Product.wxs)
1. 定义基础信息
<?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="*" Name="你的UDF工具名" Language="1033" Version="1.0.0.0" Manufacturer="你的公司名" UpgradeCode="用WiX GuidGen生成唯一GUID"> <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> <!-- 升级规则,支持后续版本自动覆盖旧版 --> <MajorUpgrade DowngradeErrorMessage="发现新版本,请先卸载旧版本再安装。" /> <MediaTemplate /> <!-- 定义安装目录结构 --> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="COMPANYFOLDER" Name="你的公司名"> <Directory Id="INSTALLFOLDER" Name="你的UDF工具名" /> </Directory> </Directory> </Directory>
2. 添加核心文件与依赖
在Product标签内添加Feature,把所有文件和区域性文件夹作为Component加入:
<Feature Id="ProductFeature" Title="你的UDF工具" Level="1"> <!-- 核心XLL文件 --> <Component Id="MainXll" Directory="INSTALLFOLDER" Guid="生成唯一GUID"> <File Id="XllFile" Source="$(var.ProjectDir)..\Output\你的项目名.xll" KeyPath="yes" /> </Component> <!-- 依赖DLL示例 --> <Component Id="ExcelDnaIntegration" Directory="INSTALLFOLDER" Guid="生成唯一GUID"> <File Id="ExcelDnaIntegrationDll" Source="$(var.ProjectDir)..\Output\ExcelDna.Integration.dll" /> </Component> <!-- 其他依赖DLL照此格式添加 --> <!-- 区域性资源文件夹(以zh-CN为例) --> <Component Id="ZhCnResources" Directory="INSTALLFOLDER\zh-CN" Guid="生成唯一GUID"> <File Id="ZhCnResDll" Source="$(var.ProjectDir)..\Output\zh-CN\你的项目名.resources.dll" KeyPath="yes" /> <!-- 该文件夹有多个文件的话,继续添加<File>标签 --> </Component> <!-- 其他语言的区域性文件夹照此格式添加 --> </Feature>
3. 配置Excel自动加载UDF(关键)
让Excel启动时自动加载XLL,需要添加注册表项,在Feature外、Product内添加:
<!-- 注册Excel加载项(HKLM适合企业全局部署) --> <Component Id="ExcelAddInReg" Directory="INSTALLFOLDER" Guid="生成唯一GUID"> <RegistryKey Root="HKLM" Key="Software\Microsoft\Excel\AddIns\你的UDF工具名.XLL"> <RegistryValue Name="Description" Value="你的UDF工具描述" Type="string" /> <RegistryValue Name="FriendlyName" Value="你的UDF工具名" Type="string" /> <RegistryValue Name="LoadBehavior" Value="3" Type="integer" /> <!-- 3代表启动时加载 --> <RegistryValue Name="Path" Value="[INSTALLFOLDER]你的项目名.xll" Type="string" /> </RegistryKey> </Component> <!-- 将注册表组件关联到Feature --> <Feature Id="ProductFeature" Title="你的UDF工具" Level="1"> <!-- 之前的组件 --> <ComponentRef Id="ExcelAddInReg" /> </Feature>
注意:如果是64位系统上的32位Excel,注册表路径要改成
Software\Wow6432Node\Microsoft\Excel\AddIns\...,可以通过WiX的Platform条件判断适配。
4. 添加卸载清理逻辑
确保卸载时删除所有文件和注册表:
<!-- 清理安装目录及子文件夹 --> <Component Id="CleanupFiles" Directory="INSTALLFOLDER" Guid="生成唯一GUID"> <RemoveFile Id="CleanAllFiles" Name="*.*" On="uninstall" /> <RemoveFolder Id="RemoveZhCnFolder" Directory="INSTALLFOLDER\zh-CN" On="uninstall" /> <!-- 其他语言文件夹照此添加 --> <RemoveFolder Id="RemoveInstallFolder" Directory="INSTALLFOLDER" On="uninstall" /> </Component> <!-- 将清理组件关联到Feature --> <Feature Id="ProductFeature" Title="你的UDF工具" Level="1"> <!-- 之前的组件 --> <ComponentRef Id="CleanupFiles" /> </Feature>
最后闭合标签:
</Product> </Wix>
四、编译生成MSI
- 右键WiX项目 -> Build,无错误的话会在
bin\Debug或bin\Release目录生成MSI文件 - 若出现文件找不到的错误,检查
Source路径是否和你的Output目录匹配
五、测试部署
- 在干净测试机上安装MSI,检查:
- 安装目录是否包含所有文件(XLL、DLL、区域性文件夹)
- 打开Excel,查看UDF是否自动加载(可在「选项」->「加载项」中确认)
- 测试UDF功能及区域性资源是否生效
- 卸载MSI,检查:
- 安装目录是否被完全删除
- Excel加载项注册表是否被清除
六、企业内部部署优化
- 平台适配:针对32位/64位Excel分别编译对应平台的MSI(WiX项目设置Platform为x86或x64)
- 静默安装:用命令
msiexec /i 你的安装包.msi /qn实现无交互安装,适合组策略推送 - 版本管理:保留
UpgradeCode不变,更新版本时修改Product的Version,即可自动升级旧版 - 日志排查:安装失败时用
msiexec /i 你的安装包.msi /l*v install.log生成日志定位问题
内容的提问来源于stack exchange,提问作者Vinay Kumar.o
相关产品推荐
相关产品推荐

