Windows installer Installshield-根据运行时给定的文件更新注册表

Windows installer Installshield-根据运行时给定的文件更新注册表,windows-installer,registry,installshield,installscript,Windows Installer,Registry,Installshield,Installscript,我正在使用installshield 2010编写一个基本的MSI安装程序。 另一家公司将提供一个.reg文件,安装程序将在运行时读取该文件,并相应地更新注册表 我想不出怎样才能做到这一点 我设法使用Installscript编写了一个脚本来完成这一任务,但是当这个脚本以不同的执行方式运行时,我不知道如何访问setup.exe所在的源目录(以及.reg文件) MSIGetproperty不起作用,我为SETUPEXEDIR得到的只是“.”在延迟执行期间,您无法访问大多数属性。您可以: 1.使用C

我正在使用installshield 2010编写一个基本的MSI安装程序。 另一家公司将提供一个.reg文件,安装程序将在运行时读取该文件,并相应地更新注册表

我想不出怎样才能做到这一点

我设法使用Installscript编写了一个脚本来完成这一任务,但是当这个脚本以不同的执行方式运行时,我不知道如何访问setup.exe所在的源目录(以及.reg文件)


MSIGetproperty不起作用,我为SETUPEXEDIR得到的只是“.”

在延迟执行期间,您无法访问大多数属性。您可以: 1.使用CustomActionData属性传递所需的值。 2.使用即时自定义操作,使用从REG文件读取的内容更新注册表表。这样,Windows Installer引擎将为您处理回滚

我还可以提出另一种解决方案:
另一家公司将提供一个MST文件,其中包含注册文件中应该包含的内容的注册表表。然后将使用指向MST的TRANSFORMS属性执行安装。通过这种方式,您可以免费回滚和卸载。

在延迟执行期间,您无法访问大多数属性。您可以: 1.使用CustomActionData属性传递所需的值。 2.使用即时自定义操作,使用从REG文件读取的内容更新注册表表。这样,Windows Installer引擎将为您处理回滚

我还可以提出另一种解决方案:
另一家公司将提供一个MST文件,其中包含注册文件中应该包含的内容的注册表表。然后将使用指向MST的TRANSFORMS属性执行安装。通过这种方式,您可以免费获得回滚和卸载。

您可以将签名、DrLocator和AppSearch表结合使用,将注册表文件的位置放在某些公共属性中。我们称之为“我的注册文件”。然后将自定义操作的条件设置为“MY_REG_FILE”。如果文件实际上不存在,则不会设置属性,条件的计算结果将为false,操作将不会运行

MSDN提供了一个将三个表一起使用以查找文件的示例-

您可以使用Signature、DrLocator和AppSearch表将注册表文件的位置放在某些公共属性中。我们称之为“我的注册文件”。然后将自定义操作的条件设置为“MY_REG_FILE”。如果文件实际上不存在,则不会设置属性,条件的计算结果将为false,操作将不会运行

MSDN提供了一个将三个表一起使用以查找文件的示例-

1。我无法获取CustomActionData属性。我总是得到“2”。我尝试使用即时自定义操作,它确实有效。问题是它不会回滚。重新评价MST,我不能要求公司这么做。所以这不是我的选择。您是否正确使用CustomActionData?(见附件)。2.如果即时自定义操作只更新注册表表,则回滚将由您负责。1。我遵循了这些说明:但我仍然得到空字符串。2.我理解你的建议,我相信它会奏效。一个问题:.reg文件是可选的。如果没有提供.reg文件,我不想更改注册表。我怎样才能做到呢?你只需要在你的直接CA中有一个if语句。我猜我们不在同一页上。我的理解是:1。将安装程序设置为将注册表值更新为特定属性。2.读取.reg文件并相应地设置属性。3.安装程序将根据属性设置注册表。如果找不到.reg文件,如何插入if语句以避免更新注册表?1。我无法获取CustomActionData属性。我总是得到“2”。我尝试使用即时自定义操作,它确实有效。问题是它不会回滚。重新评价MST,我不能要求公司这么做。所以这不是我的选择。您是否正确使用CustomActionData?(见附件)。2.如果即时自定义操作只更新注册表表,则回滚将由您负责。1。我遵循了这些说明:但我仍然得到空字符串。2.我理解你的建议,我相信它会奏效。一个问题:.reg文件是可选的。如果没有提供.reg文件,我不想更改注册表。我怎样才能做到呢?你只需要在你的直接CA中有一个if语句。我猜我们不在同一页上。我的理解是:1。将安装程序设置为将注册表值更新为特定属性。2.读取.reg文件并相应地设置属性。3.安装程序将根据属性设置注册表。如果找不到.reg文件,如何插入if语句以避免更新注册表?谢谢。我已经接受了Freund的建议,但是你的解决方案看起来很有趣也很简单。谢谢。我已经接受了弗伦德的建议,但是你的解决方案看起来很有趣也很简单。