的InstallShield CustomAction:如何加载管理依赖组件(InstallShie

2019-07-04 16:07发布

我有一个基本的MSI InstallShield安装与从二进制表运行管理EXE自定义操作。 我想一个简单的测试只运行一个控制台,并且工作正常。 当我添加一个.DLL装配参考EXE,它无法找到DLL。 如何让我的InstallShield知道这个引用的程序集,因此它可以与EXE加载它?

Answer 1:

自定义操作只有单个文件解压缩到一个临时位置下的临时名称。 有关.dll文件的依赖性工作,他们需要在两个被提取,并至少.dll文件必须有预期的名称。 通常,这是最简单的加入既“安装文件”,并引用办[SUPPORTDIR]\your.exe自定义操作。



Answer 2:

我找不到使用,让我做什么,我试图做的.Net自定义操作一个体面的方式。 我最终使用DTF(部署工具基金会)的WiX的部分,以创建组装和它的工作很大。



Answer 3:

请将您的DLL作为“isclrwrap”二进制表的依赖。 你可以找到直接的编辑器,二进制表。 这将解决您的问题。



Answer 4:

好吧,我会加上今天是如何工作的细节WRT的Installshield 2014 其他答案可以同样正确WRT其他的InstallShield版本。 我可以看到,迈克尔的回答是,从2012年,从那时起了很多变化。 让我们来看看。

可以有两种类型依赖于你的.NET程序集:

  1. 托管(用C#或VB.Net语言。OP具有这种特殊情况下)
  2. Unamanaged或天然(如C ++的DLL穿过p /调用调用)。 你不引用,组件在C#项目,但他们使用的是在运行时加载DllImport attribtue和良好定义的组件搜索机制。

我们先来了解OP的问题,这是对管理组件的依赖的情况下:

只是对于内部的InstallShield有自己的数据库中每个人的信息。 所以,当你永远添加自定义操作(在你的InstallShield基本MSI项目),这就要求目前在自定义操作的管理组件,然后将所有属性的方法是把作为记录ISClrWrap内部数据库的表,如下图所示:

现在InstallShield不会提供任何用户界面或直接的机制,我们可以定义你的管理组件的依赖(您添加在Visual Studio C#项目引用的那些)。 但是你可以更新这个数据库表来反映相同。 您需要添加一条记录在这个表中的每个新的依赖。 对于名称列,你应该选择Dependency0为第一依赖, Dependency1为第二依赖等。 看看下面的快照,我怎么在上面按新按钮添加一个新的记录后,做到了:

添加了所有您管理的依赖组件后表开始寻找这样的:

而已。 您从这里完成。 保留其余的InstallShield。 现在提出的方法MyManagedAssembly.dll就能调用目前在方法MyManagedDependencyAssembly1.dllMyManagedDependencyAssembly2.dll在安装过程中。

注意事项

  1. 您不必到管理依赖组件添加到支持文件(其路径被表示为[SUPPORTDIR]属性)。 在安装过程中如何管理的InstallShield管理依赖组件的复制是其内部实现细节。
  2. 核心.NET程序集C#项目(在自定义操作使用)的,其是.NET框架整箱例如部分的依赖System.dllSysten.Core.dll等也可以不添加到此表。 他们被默认加载时的InstallShield加载CLR执行托管代码。


文章来源: InstallShield CustomAction : How to load the managed dependency assemblies