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

使用WiX或其他命令行/脚本生成MSI变换的方案咨询

可行实现方案

方案1:基于WiX DTF类库内存生成(开发成本最低)

你之前了解的torch命令行需要两份MSI文件是工具层的限制,底层WiX提供的DTF(Deployment Tools Foundation)类库支持内存操作,无需落地中间修改版MSI,也可大幅降低杀毒拦截概率:

  • 仅需引用NuGet包Microsoft.Deployment.WindowsInstaller,无需完整安装WiX工具集
  • 核心实现逻辑:
    1. 调用Installer.OpenPackage(原始MSI路径, true)打开原始MSI的只读副本,第二个参数设置为true会忽略系统安装状态关联,避免触发杀毒对系统安装服务调用的拦截
    2. 开启数据库事务,直接执行SQL修改需要调整的属性,示例代码:
    using (var installPackage = Installer.OpenPackage(原始MSI路径, true))
    using (var db = installPackage.Database)
    {
        // 批量修改属性,可多次执行该语句
        db.Execute("UPDATE Property SET Value = ? WHERE Property = ?", "自定义属性值", "要修改的属性名");
        
        using (var originalDb = new Database(原始MSI路径, OpenDatabase.ReadOnly))
        {
            // 直接生成变换文件,无中间修改版MSI落地
            db.GenerateTransform(originalDb, 输出变换文件路径);
            db.CreateTransformSummaryInfo(originalDb, TransformErrors.None, TransformValidation.None);
        }
    }
    
    1. 全程仅会读取一次原始MSI、最终写入一次变换文件,不会生成修改版MSI实体文件,不会向变换中添加任何额外文件,完全匹配你的需求。

方案2:手动构造变换文件(完全规避MSI读取拦截)

如果方案1的MSI读取操作仍然触发杀毒规则,可直接按照微软公开的MSI变换二进制格式构造文件,全程无需读取原始MSI:

  • MSI变换本质是存储两个MSI数据库差异的增量包,仅修改属性的场景下,只需要写入属性表的变更记录即可,不需要包含任何文件添加逻辑
  • 你只需明确要修改的属性名、属性值,按照格式规范构造仅包含属性表变更的变换包即可,完全不涉及原始MSI读取操作,不会触发杀毒拦截。

内容的提问来源于stack exchange,提问作者Henning Michael Møller Just

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:06:04