代码之家  ›  专栏  ›  技术社区  ›  Dour High Arch

在Windows Installer提交中运行批处理文件

  •  6
  • Dour High Arch  · 技术社区  · 15 年前

    在安装主输出之后,我没有成功地修改Windows Installer MSI以运行批处理文件。我已经搜索过了,找到了很多建议,但是没有什么有用的。

    添加自定义操作
    自定义操作只能是可执行文件。批处理文件不可执行。

    创建运行批处理文件的Windows脚本宿主可执行文件
    很多人都试图这样做,包括 SO 没有人能让这项计划付诸实施。

    使用WIX或InstallShield
    我没有时间或权力改变公司的安装技术。

    用orca编辑.msi并添加自定义属性,然后是自定义操作,然后编辑installExecuteSequence,…
    我已经尝试了几个小时,并且只创建了在运行它们时抛出系统错误的安装程序。
    5 回复  |  直到 9 年前
        1
  •  10
  •   William Leara    15 年前

    你上面说的不正确:

    自定义操作只能执行 文件夹。批处理文件不可执行。

    自定义操作(即使没有InstallShield等工具)也可以基于.exe、vbscript、jscript或dll。如果您编写一个DLL,您可以编写您想要调用批处理文件的任何代码,或者对系统进行任何更改——这是没有限制的。

    更新 :一个适用于我的示例:(CustomAction表中的条目)

    Action Test
    Type 34
    Source SystemFolder
    Target cmd.exe /c c:\test.bat
    ExtendedType <blank>
    
        2
  •  2
  •   Dour High Arch    15 年前

    我通过创建一个包含以下基本内容的exe来解决这个问题:

    System.Diagnostics.Process.Start(pathToBatchFile);
    

    将exe添加到msi文件中,然后将其作为自定义操作运行。

        3
  •  1
  •   Community Egal    7 年前

    虽然“威廉·李拉”提出的答案是一个很好的开始,但我找到了一个更好的解决办法。 here 值得一提。

    此方法的另一个优点是,您可以将批处理文件放在应用程序安装文件夹中,而不是根C文件夹中,但我们使用特殊标志将执行延迟到 文件拷贝 行动,我们也使用 拟人化 拥有更高的特权 程序文件

    几点注意事项

    1. 使用 特迪迪尔 而不是 安装程序
    2. 确保引用路径。

    这是我的两个自定义操作。在我的情况下,我想强制 本地的 命令处理器修复一些注册表项,因此我不使用 康斯佩克 .

    第一个操作(类型50)使用目标的输入参数在源中执行命令,因为类型为50+1024+2048 拟人化 旗帜。

    • 行动: 最后动作
    • Type: 三千一百二十二
    • 来源: NCOM
    • 目标: /C“【targetdir】修正.bat”

    第二个动作定义 NCOM 立即拥有:

    • 行动: 终审法院
    • Type: 五十一
    • 来源: NCOM
    • 目标: [windowsfolder]系统32\cmd.exe

    然后您应该将这些操作添加到 安装执行序列 :

    • 行动: 最后动作
    • 条件: 未安装
    • 序列: 五千零二

    这一个:

    • 行动: 终审法院
    • 条件:
    • 序列: 五千零一

    注意,在我的情况下,我可以很容易地调整要调用的操作 reg.exe导入fixup.reg 也是。 最后一个可以使用 梅西兰 如建议 here 在构建后自动执行过程。

        4
  •  1
  •   Echilon    11 年前

    生成一个使临时.bat文件更改为所需目录的exe,然后 CALL 另一个BAT文件可以满足您的需要。

    告诉自定义操作使用该exe。

    cpp exe的第一个参数是该exe本身的路径。这可以用来确定你自己的方位,而这些信息也可以用来制作临时的.bat。

        5
  •  0
  •   eugene.sushilnikov    9 年前

    在我的例子中,我添加了“自定义操作”。
    在“安装”文件夹中,选择“添加自定义操作”
    选择cmd.exe(c:\windows\system32\cmd.exe)
    然后在cmd.exe的属性中,将“arguments”编辑为
    “/install/c c:\myapp.exe--执行一些操作”