Installation InstallShield CustomAction:如何在安装p/invoke调用期间加载非托管/本机依赖程序集

Installation InstallShield CustomAction:如何在安装p/invoke调用期间加载非托管/本机依赖程序集,installation,windows-installer,pinvoke,installshield,installshield-2014,Installation,Windows Installer,Pinvoke,Installshield,Installshield 2014,我正在创建一个基本的MSI installshield 2014项目。我添加了一个自定义操作,该操作调用托管.Net程序集(MyCSharpAssembly.dll)中的公共方法。现在,我的管理DLL又调用了一个在unangange/本地组件中出现的方法(C++编写的代码> MyunaMaNaDeAdgPulsPulsStudio.DLL)。我使用DllImport方法在运行时加载本机程序集 我根据thread的可接受答案将本机DLL添加到支持文件([SUPPORTDIR])。当我运行MSI输出

我正在创建一个基本的MSI installshield 2014项目。我添加了一个自定义操作,该操作调用托管.Net程序集(MyCSharpAssembly.dll)中的公共方法。现在,我的管理DLL又调用了一个在unangange/本地组件中出现的方法(C++编写的代码> MyunaMaNaDeAdgPulsPulsStudio.DLL</代码>)。我使用
DllImport
方法在运行时加载本机程序集

我根据thread的可接受答案将本机DLL添加到支持文件([SUPPORTDIR])。当我运行MSI输出时,我还看到这些本机程序集被复制到installshield的临时工作目录中。但还是不行?当安装程序运行时,我只是在日志中发现以下错误-

未能加载程序集。未找到Dll


这本质上意味着CLR/.net运行时无法在运行时查看本机程序集DLL。有人知道在安装过程中专门加载本机dll依赖项吗?

也许您必须使用具有完整路径的LoadLibrary来加载这些dll。或者它们缺少运行时依赖项。我同意验证DllImport加载的路径,比如使用,并建议检查系统的状态,比如在发生故障之前或之后使用MessageBox暂停安装。在你的问题中添加任何有用的内容。还请澄清每个相关DLL(包括MyCSharpAssembly.DLL)的位置,无论是SUPPORTDIR、binary table还是安装在某处。我在我的C#代码中添加了一些日志,这反过来会调用非托管库中的API。我运行了code
Directory.GetCurrentDirectory
。这告诉我,我的托管代码正在从
C:\Windows\SysWow64
调用,该路径与
msiexec.exe
所在的路径相同。如果我在这个路径复制我的C++程序集,那么我的P/UncCK调用开始工作,但是这是一个非常脏的解决方案,因为我必须手动删除它,因为安装屏蔽不知道。应该有办法告诉installshield,请从[SUPPORTDIR]加载未更改的二进制文件。这是否回答了您的问题?