You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:用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安装项目
  1. 在Visual Studio里新建WiX Setup Project(如果看不到模板,先安装WiX的VS扩展)
  2. 右键项目 -> 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目录匹配
五、测试部署
  1. 在干净测试机上安装MSI,检查:
    • 安装目录是否包含所有文件(XLL、DLL、区域性文件夹)
    • 打开Excel,查看UDF是否自动加载(可在「选项」->「加载项」中确认)
    • 测试UDF功能及区域性资源是否生效
  2. 卸载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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:01:45