【发布时间】:2014-01-31 00:25:26
【问题描述】:
我有一个 InstallShield 安装程序,它在安装期间调用 C++/CLI DLL Me.dll,而 Me.dll 又调用 C# 程序集; Microsoft.Foo.dll
当 InstallShield 安装程序尝试加载 Microsoft.Foo.dll 时,我收到 FileNotFoundException(即无法加载程序集)。
使用 fuslogvw.exe 它告诉我程序集正在尝试从桌面加载,这是我运行安装程序的地方。奇怪的是,在安装程序中我调用 ChangeDirectory,然后验证 SUPPORTDIR(即提取文件的临时目录)确实是当前目录。我还在所有程序集上尝试了 UseDLL,但这也不起作用。
如果我在安装期间手动将程序集复制到桌面,安装程序可以工作。
我一定是少了一步。如何将 InstallShields 当前工作目录更改为 SUPPORTDIR 以便正确找到此程序集?
【问题讨论】:
-
如果安装程序正在调用 dll,那么它需要与安装程序位于同一文件夹中。更改目录与该问题无关。您似乎在安装程序 dll 和已安装 dll 之间存在某种混淆。安装的应用程序中是否也使用了 Microsoft.foo.dll?
-
是的,它也用于已安装的应用程序中。更具体地说,我调用 UseDLL(SUPPORTDIR ^ "Me.dll");然后调用该 DLL 中的函数。 Me.dll 是引用 Microsoft.Foo.dll 的内容。
-
然后需要在这两个地方,除非您打算尝试使用 appdomain.assembly 解析。 msdn.microsoft.com/en-us/library/ff527268(v=vs.110).aspx
-
我会看看那个。感谢您的帮助。
标签: installshield