如何在不更改所有值的情况下使用InstallShield响应文件?

时间:2011-11-02 07:07:59

标签: installshield

我在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”)。

2 个答案:

答案 0 :(得分:3)

您可以使用SilentWriteDataSilentReadData实现自己的静默对话框例程。例如,您可以在写入时检查该值是否为默认值,如果是,则写入一个特殊字符串。在读取时,如果您回读特殊字符串,请不要覆盖默认值。您必须对OnFirstUIBefore期间使用的所有现有对话框执行此操作,并且需要此行为,可能包括InstallShield提供的覆盖。

答案 1 :(得分:1)

INI条目为formatted,因此它们支持安装程序属性。这意味着您可以使用安装程序属性而不是硬编码值。例如:

[MY_PROPERTY]

然后,此属性可以与您的自定义控件关联,该控件会从您的用户检索信息(例如编辑框)。