我有一个InstallShield安装程序,在安装期间调用C ++ / CLI DLL Me.dll,后者又调用C#程序集; Microsoft.Foo.dll
当InstallShield安装程序尝试加载Microsoft.Foo.dll时,我得到一个FileNotFoundException(即无法加载程序集)。
使用fuslogvw.exe它告诉我正在尝试从桌面加载程序集,这是我运行安装程序的地方。奇怪的是,在安装程序中我调用ChangeDirectory,然后验证SUPPORTDIR(即提取文件的temp)确实是当前目录。我也在所有程序集上尝试过UseDLL,但这也不起作用。
如果我在安装期间手动将程序集复制到桌面,则安装程序可以正常运行。
我一定是错过了一步。如何将InstallShields当前工作目录更改为SUPPORTDIR,以便正确查找此程序集?
答案 0 :(得分:0)
我之前玩过许多耳朵(博客:Managed Code CAN Access the MSIHANDLE)。所有这些都被Windows Installer XML(WiX)部署工具基础(DTF)淘汰。阅读Deployment Tools Foundation (DTF) Managed Custom Actions获取初级读本。
基本上DTF构建自定义动作DLL,它作为标准C / C ++自定义动作出现在Windows Installer中。它们处理过程中调用C#代码的过程,以便不使用CLR版本对MSIEXEC进行纹身处理,并使所有依赖项在当前目录中可用,并对所有MSI API调用进行编组,将其作为Session类暴露给您的代码。它确实是这里描述的黄金标准:Reasons DTF is Better