过去,我用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>
所以这里有几个问题:
答案 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。它们容易出错。非常。
链接 :