有很多线程和问题。但我所面临的错误却完全不同。所以让我在这里解释一下。在本文的帮助下,安装程序类和自定义操作
我在Commit中添加了项目主输出(拥有安装程序类)作为自定义操作。自定义操作条件:不删除。但当我尝试运行MSI时,它会在弹出窗口中给我一个错误,错误1001。错误1001。InstallUtilLib.dll:未知错误
下面是我的代码和安装程序日志:
Project Build的目标平台是ANY CPU,安装程序的平台是x86位
InstallHelper.cs
[RunInstaller(true)]
public partial class InstallHelper : System.Configuration.Install.Installer
{
public InstallHelper()
{
InitializeComponent();
}
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
}
public override void Commit(IDictionary savedState)
{
base.Commit(savedState);
//configrureAppAfterInstallation();
}
}
项目的主要输出作为自定义操作包含在Commit操作下,参数如下:
CustomActionData:/targetDir="[targetDir]\",/srcDir="[SOURCEDIR]\">
条件:不删除
事件查看器中的日志快照:
来自源MsiInstaller的事件ID 11001的描述不能是建立引发此事件的组件未安装在您的本地计算机或安装已损坏。您可以安装或者修复本地计算机上的组件。
如果事件发生在另一台计算机上,则显示信息必须与事件一起保存。
事件中包含以下信息:
产品:MyApp--错误1001。错误1001。InstallUtilLib.dll:未知错误。
(NULL)
(NULL)
(NULL)
(NULL)
(NULL)
消息资源存在,但在中找不到该消息字符串/消息表
在%TEMP%文件夹中生成的日志:
错误1001。错误1001。InstallUtilLib.dll:未知错误。
===日志记录已停止:2017年11月16日19:43:53===
无论我更改什么,无论是自定义操作条件,还是在安装或提交下添加自定义操作,或两者兼而有之。我得到了同样的错误和同样的日志。有时它使用相同的配置,但随后不会调用自定义操作。为了避免这个错误,我不得不删除自定义操作。但这不是要求。我不明白,这个错误意味着什么
我尝试从头开始创建一个新的类似项目,并添加自定义操作。它奏效了。但目前的项目并非如此。可能的原因是什么?
如果有任何帮助,我将不胜感激。我真的陷入了困境。提前谢谢。
===============编辑=====
我们使用插件express(v8.2.4371)框架来开发office插件。它自动将adxRegistor.exe添加为customAction(用于安装、回滚和卸载模式)以执行一些操作,如注册加载项等。
该系统为64位类型。该项目的目标是4.0.net框架版本。
我正在为安装、提交自定义操作模式添加我自己的customAction。是否可以添加两个自定义操作?如果是这样的话,我应该/必须关心哪些事情?例如类似的条件或它们的入口点参数。
对于其他使用InstallUtilLib.dll的人:尝试安装使用Visual Studio Setup&部署项目类型:
我最近在迁移Visual Studio安装程序后出现了这个错误;将项目部署到新机器和Visual Studio的新版本(安装的.NET框架可能不同)。在我的例子中,从安装项目中删除我的.NET自定义操作就像OP一样消除了错误,但我的代码不是根本原因。
根本原因是忘记检查安装项目的启动条件(查看->启动条件),我需要在其中更改.NET Framework启动条件,以匹配我迁移到的计算机上实际安装的内容(而不是旧开发PC上的内容)。此外,您还需要通过右键单击Setup&部署项目,然后单击"属性"。然后单击"必备组件"按钮,确保.NET Framework必备组件与应用程序的目标版本以及启动条件使用的版本相匹配。
我无法用那些自定义操作参数来重现这一点,所以我将列出您应该关注的内容:
-
在架构上保持一致。如果您安装了x86的TargetPlatform,请使用针对x86的自定义操作代码。InstallUtilLib的内部将加载FW版本,然后尝试加载带有反射的类,而架构不匹配可能会导致托管Dll失败。
-
请确保已为您的自定义操作安装了.NET FW。
-
您的提交CA不需要NOT REMOVE条件。根据定义,它只会在安装的提交阶段被调用。
-
您必须在自定义操作的所有节点上都有自定义操作:安装、提交、回滚、卸载。它们之间存在着某种内在状态,它们都是必要的。此外,您的代码没有显示任何卸载或回滚方法。看起来您手动添加了此代码,而不是使用向导添加安装程序类。