我有一个新的InstallShield(Pro)项目,我用它来安装Windows .Net应用程序。安装的文件包括文本.config文件。我想为交互式安装用户提供使用自定义文件覆盖该文件的能力(由用户选择)。
我为用户创建了一个自定义对话框来提供文件路径。文件路径修改自定义公共属性(称为CUSTOMBOOTSTRAP
)。
现在是一个棘手的问题:如何使用用户在此路径提供的任何内容覆盖我的默认文件?这是我需要的自定义操作,还是有其他方法(动态文件链接?)。
谢谢, -James
答案 0 :(得分:1)
我觉得这个问题很有意思,主要是因为MSI很难适应这个问题。所以这里有一些考虑因素来设计你的方法:
维修会发生什么? 问题中的文件是否已版本化,如果是,用户是否可以提供低于您所包含版本的版本? (或类似情况下,file versioning rules的其余部分会导致类似的情况?)如果是这样,您将希望避免让.msi“拥有”该文件,因为它会覆盖用户选择的文件知道。此外,除非有理由相信用户提供的路径仍然可用,否则您必须在修复发生之前将其丢失。
卸载时会发生什么?文件应该删除还是留下?你知道它的名字吗? (如果名称可能有所不同,请考虑“记住属性”模式,但您需要删除该文件。)
您有哪些选择?
“半自定义操作”可能能够以几种不同的方式解决此用例。您可以为DuplicateFile
table或MoveFile
table创建临时条目。或者,如果您愿意做足够的扭曲来填写Directory
表和Media
表,您甚至可以填充File
table。我希望这些都很难正确管理。 (同样,不要忘记修复和删除 - 后者可能需要临时RemoveFile
table条目。)或者您可以进行完整的自定义操作,直接复制或移动文件。或者您可以重新构建应用程序:
将此作为用户文件是否有意义?也许该文件是一种配置形式,需要在整个机器上共享,甚至由网络管理员配置。如果是这样,您可能最好使用上述方法之一,因此它由管理员安装,然后由标准Windows文件系统安全性保护。但如果它确实是用户配置文件,可能应该在您的应用程序中管理,或者直接由用户管理。
答案 1 :(得分:0)
我最后用InstallShield(由FlexEra制作)讨论了这种情况,他们推荐了以下内容:
这部分解决了我的问题,但并不完全,因为它不允许我在安装时指定新文件;我只能在现有文件中进行选择。