我有一个基本的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程序集:
- 托管(用C#或VB.Net语言。OP具有这种特殊情况下)
- Unamanaged或天然(如C ++的DLL穿过p /调用调用)。 你不引用,组件在C#项目,但他们使用的是在运行时加载
DllImport
attribtue和良好定义的组件搜索机制。
我们先来了解OP的问题,这是对管理组件的依赖的情况下:
只是对于内部的InstallShield有自己的数据库中每个人的信息。 所以,当你永远添加自定义操作(在你的InstallShield基本MSI项目),这就要求目前在自定义操作的管理组件,然后将所有属性的方法是把作为记录ISClrWrap
内部数据库的表,如下图所示:
现在InstallShield不会提供任何用户界面或直接的机制,我们可以定义你的管理组件的依赖(您添加在Visual Studio C#项目引用的那些)。 但是你可以更新这个数据库表来反映相同。 您需要添加一条记录在这个表中的每个新的依赖。 对于名称列,你应该选择Dependency0
为第一依赖, Dependency1
为第二依赖等。 看看下面的快照,我怎么在上面按新按钮添加一个新的记录后,做到了:
添加了所有您管理的依赖组件后表开始寻找这样的:
而已。 您从这里完成。 保留其余的InstallShield。 现在提出的方法MyManagedAssembly.dll
就能调用目前在方法MyManagedDependencyAssembly1.dll
或MyManagedDependencyAssembly2.dll
在安装过程中。
注意事项 :
- 您不必到管理依赖组件添加到支持文件(其路径被表示为
[SUPPORTDIR]
属性)。 在安装过程中如何管理的InstallShield管理依赖组件的复制是其内部实现细节。 - 核心.NET程序集C#项目(在自定义操作使用)的,其是.NET框架整箱例如部分的依赖
System.dll
,Systen.Core.dll
等也可以不添加到此表。 他们被默认加载时的InstallShield加载CLR执行托管代码。