在 Windows Installer 提交中运行批处理文件
-
14-09-2019 - |
题
在安装主输出后,我无法成功修改 Windows Installer MSI 以运行批处理文件。我已经搜索过这个并找到了很多建议,但没有任何效果。
- 添加自定义操作
- 自定义操作只能是可执行文件。批处理文件不可执行。
- 创建运行批处理文件的 Windows 脚本主机可执行文件
- 很多人都尝试过这样做,包括 所以, ,而且没有人能够让它发挥作用。
- 使用 WIX 或 InstallShield
- 我没有时间或权力来改变公司安装技术。
- 使用 Orca 编辑 .msi 并添加自定义属性,然后添加自定义操作,然后编辑 InstallExecuteSequence,...
- 我已经尝试了几个小时,并且只创建了在运行它们时引发系统错误的安装程序。
解决方案
什么你上面说的是不正确:
自定义操作只能是可执行 文件。批处理文件是不可执行的。
自定义操作(即使没有像的InstallShield的工具)可以是.EXE,VBScript中,JScript中,或DLL为主。如果你写一个DLL,你可以写你要调用批处理文件或使你想对系统进行任何修改任何代码 - 没有限制
<强>更新强>:为我工作的例子:(在CustomAction表条目)
Action Test
Type 34
Source SystemFolder
Target cmd.exe /c c:\test.bat
ExtendedType <blank>
其他提示
我能够通过创建基本上由一个EXE解决这样:
System.Diagnostics.Process.Start(pathToBatchFile);
添加EXE到MSI文件然后运行它作为自定义动作。
虽然“William Leara”提出的答案是一个非常好的开始,但我找到了更好的解决方案 这里 值得一提。
此方法的另一个优点是您可以将批处理文件放在应用程序安装文件夹中而不是根 C 文件夹中,但我们使用特殊标志将执行推迟到之后 文件复制 行动,我们也使用 禁止冒充 需要更高的权限来运行 程序文件
一些注意事项:
- 使用 目标目录 代替 安装目录
- 确保引用路径。
这是我的两个自定义操作。就我而言,我想强迫 本国的 命令处理器来修复一些注册表项,因此我不使用 计算机规范.
第一个操作(类型 50)使用目标的输入参数在源中执行命令,因为类型是 50+1024+2048,所以它是延迟操作 禁止冒充 旗帜。
- 行动: 最终行动
- 类型: 3122
- 来源: NCOM
- 目标: /c“[TARGETDIR]Fixup.bat”
第二个动作定义 NCOM 立即财产:
- 行动: 最终的NativeSys
- 类型: 51
- 来源: NCOM
- 目标: [Windows文件夹]System32\cmd.exe
然后你应该将这些操作添加到 安装执行序列:
- 行动: 最终行动
- 健康)状况: 未安装
- 顺序: 5002
和这个:
- 行动: 最终的NativeSys
- 健康)状况:
- 顺序: 5001
请注意,就我而言,我可以轻松调整要调用的操作 reg.exe 导入 Fixup.reg 也。终于可以用了 姆西特兰 按照建议 这里 在后期构建中以自动化该过程。
请,使一个临时.bat文件的EXE改为你想要的任何目录和CALL
另一个bat文件,做你所需要的。
给所述自定义动作使用该EXE。
的第一个参数到CPP的exe是路径到的exe本身。这可以被用来确定自己的方位,并且该信息可以在临时.BAT的制作中使用
在我的情况,我补充说:“自定义操作”。结果在文件夹中的“安装”,选择“添加自定义操作”点击选择cmd.exe的(C:\ WINDOWS \ SYSTEM32 \ cmd.exe的)结果然后输入cmd.exe编辑属性“参数”为
安装/ C C:\ MYAPP.EXE --exec-一些行动“