无需其他先决条件的自定义操作

时间:2019-07-29 07:01:28

标签: .net wix windows-installer

过去,我用VBScript编写了所有自定义操作,因为我的理解是,这种(和JScript)是唯一一种不需要在目标系统上附加先决条件的自定义操作。

但是,编写VBScript很麻烦,现在我还遇到了一个问题,显然在VBScript中无法解决(请参见Currupted file in non-english locale (encoding problem?))。

所以我正在考虑使用C#自定义操作。但是我不想为自定义操作引入其他先决条件(请注意,我要安装的应用程序不使用.NET Framework)。

This list显示哪个Windows版本包括哪个.NET Framework版本。假设较新的.NET Framework版本是向后兼容的,则.NET Framework 2.0自定义操作看起来应该可以在几乎所有Windows版本(XP除外,我不在乎)上运行。但是然后在this site上说

  

此外,如果您的应用程序针对版本2.0、3.0或3.5,则可能要求您的用户在Windows 8,Windows 8.1或Windows 10计算机上启用.NET Framework 3.5,然后才能运行您的应用程序。 / p>

所以看起来新的.NET Framework版本向后兼容的假设是不正确的...

WiX自定义操作项目创建了具有以下设置的CustomAction.config文件:

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

所以这里有几个问题:

  1. 我可以假定具有上述配置的.NET Framework 2.0自定义操作可以在任何Windows(XP除外)上运行吗?还是尽管配置文件将4.0声明为受支持的运行时,但仍需要在Windows的较新版本上启用.NET Framework 3.5?
  2. 一般来说,在不引入任何其他先决条件的情况下创建自定义动作(不是VBScript或JScript)的最佳方法是什么? (我当时正在考虑“用于WiX v3的C ++自定义操作项目”,但是看起来这就像创建了一个托管C ++项目,因此围绕.NET Framework出现了同样的问题。)

1 个答案:

答案 0 :(得分:0)

.NET自定义操作存在一些问题。我有this old answer-我已经有一段时间没有评论了。我记得我曾经想过“那天我一定失去了理智”时读过它。答案结尾处的列表中提到了一些托管代码问题(迅速: 1) 过多的依赖项, 2) { 3}}(是否最新?), 3) GAC依赖项, 4) ,缺少最小的依赖项和卸载问题, {{ 1}} 。.NET运行时损坏或不可用,等等。)我不是这个主题的专家。

随着时间的推移,使用.NET似乎会变得越来越好,因为运行时现在已成为操作系统的一部分。您可以锁定安装程序,使其不会通过启动条件安装在下游操作系统上。 CLR version load behavior issues并不多-基本上只有2个和4个?

以下是分别使用C ++和C#/ .NET进行自定义操作的两个答案:

How to use C# managed code custom actions in WiX。它们容易出错。非常。


链接