单击我的 MSI 后,我需要立即复制文件。我现在正在使用 CopyFiles 功能,但它做得不够快。我需要自己的自定义操作还是有办法在显示任何 UI 之前移动它?
谢谢
单击我的 MSI 后,我需要立即复制文件。我现在正在使用 CopyFiles 功能,但它做得不够快。我需要自己的自定义操作还是有办法在显示任何 UI 之前移动它?
谢谢
使用 reg 文件和 ini 文件完成的任何操作通常都可以嵌入并在 MSI 中完成。这是非常优越的,因为如果 MSI 的安装被中止,MSI 文件将具有内置的回滚支持。
Installshield 提供了它自己的 setup.exe 启动器文件,它实际上根本不是 MSI 文件,正是这个文件将这些临时文件放置在系统上。这是 MSI 时代之前的遗留功能,它基本上允许糟糕的 MSI 设计高于其他任何东西。
正如 Chris 指出的那样,MSI 文件在其安装序列启动之前不应执行文件操作和系统更改(MSI 内 InstallExecuteSequence 中的 InstallInitialize 和 InstallFinalize 之间的操作)。
我建议将 ini 文件信息放在 IniFile 表中,将注册表信息放在 Registry 表中。您是否在安装过程中运行 EXE 文件?
我认为需求的定义和设计都很差。这是你应该做的一个例子:
我有一个客户直接(零售)和间接(通过增值经销商)销售产品。他的应用程序是可扩展的,因为他或他的 VAR 或他们的最终用户客户要求能够扩展/修改/覆盖具有以下属性的 MSI:
1) 升级代码
2) 产品名称
3) 许可协议
4) 图标
5) 配置文件
6) 数字证书
我的客户用 C# 编写了一个向导 UI,指导用户完成所有这些操作,我编写了一个使用 WiX DTF 库 (Microsoft.Deployment.WindowsInstaller) 与 MSI 交互的库。结果是一个实用程序,它完全封装了将 MSI 转换为变体的过程。
这也是赛门铁克防病毒软件的工作方式。
通过一些开发时间,您可以引导您的用户使用更新的 ProductName 和 Registry 表条目构建 MSI。生成的 MSI 不需要任何自定义操作,并且仍将遵循所有适用的 Windows Installer 最佳实践。