.NET3.5中的Wix自定义操作错误

时间:2014-07-13 11:41:58

标签: c# wix install windows-installer

我已经使用Wix和Custom Actions创建了一个安装包(msi)。安装.NET4的系统上的安装工作正常,但在干净的系统(WIN7 .NET3.5)上,它会因波纹管错误而失败。我缩小了wxs包,似乎如果我删除对CustomActions的引用,msi安装(但没有注册表更改)。 CustomActions根据用户PC配置向Registry输入新值。同样的项目再次在.NET4 PC上发挥作用。 Target框架随处可见.NET3.5。有什么想法吗?

=== Logging stopped: 7/13/2014  14:23:19 ===
MSI (c) (00:F4) [14:23:19:249]: Note: 1: 1708 
MSI (c) (00:F4) [14:23:19:249]: Note: 1: 2205 2:  3: Error 
MSI (c) (00:F4) [14:23:19:267]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1708 
MSI (c) (00:F4) [14:23:19:267]: Note: 1: 2205 2:  3: Error 
MSI (c) (00:F4) [14:23:19:267]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1709 
MSI (c) (00:F4) [14:23:19:267]: Product: MyProject -- Installation failed.

MSI (c) (00:F4) [14:23:19:267]: Windows Installer installed the product. Product Name: MyProject . Product Version: 1.0.1. Product Language: 1033. Manufacturer: Me. Installation success or error status: 1603.

3 个答案:

答案 0 :(得分:1)

它相当奇怪的修复但是,我所要做的就是添加波纹管片段。谢谢大家的支持。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" />
    <supportedRuntime version="v2.0.50727" />
  </startup>
</configuration>

答案 1 :(得分:0)

虽然我没有完全掌握这个特定问题的速度,但我会尝试提供答案。如果您的应用程序需要.NET 4,这显然没有帮助,但是您是否尝试编译代码以针对 .NET 2.0框架而不是.NET 4?大多数计算机应该能够运行2.0代码,除非明确锁定该框架以供使用 - 某些公司可能就是这种情况。

这样的

运行时限制让我更喜欢原生的 C ++代码(或 Installscript ,这也是Installshield更高版本中的原生代码),用于严肃的设置广泛使用。

模拟的自定义操作代码(.NET代码或有效的脚本编写,例如有效的VBScript)对于内部工作非常好 - 它甚至可以为设置提供透明度到了什么是key corporate benefit of MSI

除了定位.NET 2.0之外,您还可以check that the right version of the .NET framework is available并中止设置或将其安装为prerequisite via Wix's Burn feature

最后,这实际上是我首选的解决方案,您可以让应用程序本身使用所需的设置更新注册表,并将它们从您的设置中删除。这允许更多的灵活性和错误处理。这完全取决于您要添加的设置类型。 HKLM设置通常必须由您的设置添加。

答案 2 :(得分:0)

  1. 如果可能的话,使用vbscript自定义操作可以减少麻烦。
  2. 最佳做法是,只有在本机安装程序无法完成的情况下才能使用自定义操作。根据您的描述,&#34; CustomActions正在根据用户PC配置向注册表输入新值&#34;,看起来您可以通过在PC配置事项中创建系统搜索来完成它,然后使用注册表值调整组件关于系统搜索返回的属性。