我在InstallShield X中使用静默安装文件来升级现有程序。
当安装正常运行(非静默)时,它会提示用户输入各种信息,这些信息将被写入ini文件。如果是新安装,则为提示提供默认值,如果是升级,则显示ini文件中的值。
我想创建一个静默安装,它可以更新ini文件中的某些值而不会覆盖其他值。问题是,当我创建setup.iss时,它显式地使用了我的ini文件中的值。
有没有办法告诉静默安装接受现有值?即好像用户只是单击“下一步”而不更改显示值?
这是一个人为的例子:
假设第一次安装提示“Name”并输入“WileCau”。该名称存储在程序ini文件中。
下次运行安装并提示输入“Name”时,它将读取ini文件并在输入字段中显示“WileCau”,我只需单击“下一步”即可接受现有值。
问题是,如果我为此创建静默安装,它包含类似的内容:
...
[{GUID}-DlgOrder]
...
Dlg1={GUID}-AskText-0
...
[{GUID}-AskText-0]
szText=WileCau <-- Puts this text in the entry field
Result=1 <-- Indicates clicking "Next"
...
它说szText=WileCau
我希望它使用用户输入字段中的任何值(例如,可能是“Bob”)。
答案 0 :(得分:3)
您可以使用SilentWriteData
和SilentReadData
实现自己的静默对话框例程。例如,您可以在写入时检查该值是否为默认值,如果是,则写入一个特殊字符串。在读取时,如果您回读特殊字符串,请不要覆盖默认值。您必须对OnFirstUIBefore期间使用的所有现有对话框执行此操作,并且需要此行为,可能包括InstallShield提供的覆盖。
答案 1 :(得分:1)
INI条目为formatted,因此它们支持安装程序属性。这意味着您可以使用安装程序属性而不是硬编码值。例如:
[MY_PROPERTY]
然后,此属性可以与您的自定义控件关联,该控件会从您的用户检索信息(例如编辑框)。