VS 2008 MSI安装程序:修复时Context.Parameters [“TARGETSITE”]为空

时间:2009-12-16 14:33:37

标签: visual-studio windows-installer setup-project repair

我在vs 2008中创建了一个Web设置项目,并添加了一些自定义操作。 在安装时我会获得默认表单(apppool,appname,website),一些预定义的自定义表单和一些自制的自定义表单。 现在安装时我在注册表中添加了一些数据。

我只有一个问题:TARGETSITE属性。 此属性由默认表单填充(Context.Parameters [“TargetSite”]类似于默认WebSite的“/ LM / W3SVC / 1”),并将其值正确添加到注册表中。 在我使用修复功能之前,Everthing很好......

修复时,安装会跳过前几个默认表单,因此TARGETSITE属性为空(Context.Parameters [“Targetsite”]为“”)。 可悲的是,我无法干扰这一点,从注册表中获取所需的值,我正是因为这个原因而添加它。 因为在“覆盖安装”方法中触发自定义代码之前将更新注册表值。 在注册表更新后,即使是onBeforeInstall也会被触发。

如果回滚完成,在修复时,注册表项将重置为正确的值,所以我必须相信,我可以从我的自定义操作代码中以某种方式访问​​此值。

有人对如何获得这个重要价值有任何建议吗?

P.S .: 我试图在registrykey中设置条件,这样只有当TARGETSITE值不为空时它才会被更新,但我担心这会被忽略很长时间...... TARGETSITE!=“”在注册表项条件字段中绝对没有任何效果......

1 个答案:

答案 0 :(得分:1)

我通过解决安装程序注册表项解决了这个问题。 我在installers registryEntry下手动创建一个subKey,在那里我存储了Context.Parameters [“TARGETSITE”]值。 因此修复功能不会覆盖keyValue,因为它是自定义键。 现在我在上下文或注册表中都有我的价值。

FunFacts: 当我在安装程序自己的密钥中创建customKey时,我利用了标准的meachnism,删除了安装程序注册表项,并且我的customKey也将消失。

如果有人在某个时候遇到这个问题,这可能会有所帮助......