执行后安装文件后的Wix自定义动作DLL

时间:2013-11-18 07:37:12

标签: c# dll wix windows-installer

我使用dll来安装在msi中打包的驱动程序。 以下是摘录:

<Binary Id="CustomAction2.CA.dll"
src="../artifacts/CustomAction2.CA.dll" />

<CustomAction Id="Install"                
        Execute="deferred"
        BinaryKey="CustomAction2.CA.dll" 
        DllEntry="CustomAction1" />

<CustomAction Id="InstallWithProperty"
        Property="Install"
        Value="location=[DEFAULT_INSTALLDIR]$FULL_NAME;name=myDll.dll" Execute="immediate"/>        


<InstallExecuteSequence>      
<Custom Action="InstallWithProperty" After="InstallInitialize"/>
<Custom Action="Install" After="InstallFiles" />
</InstallExecuteSequence>

我面临同样的问题。当调用自定义操作时,它说。

  

自定义操作引发的异常:   System.Reflection.TargetInvocationException:抛出了异常   通过调用的目标。 ---&GT; System.DllNotFoundException:   无法加载DLL&#39; myDll.dll&#39;:指定的模块无法加载   找到。 (来自HRESULT的异常:0x8007007E)at   CustomAction2.CustomActions.ConfigDriver(IntPtr hwndParent,UInt16   fRequest,String lpszDriver,String lpszArgs,String lpszMsg,UInt16   cbMsgMax,Int64&amp; pcbMsgOut)at   CustomAction2.CustomActions.CustomAction1(会话会话)---结束   内部异常堆栈跟踪--- at   System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo   方法,对象目标,对象参数,SignatureStruct&amp; SIG,   MethodAttributes methodAttributes,RuntimeType typeOwner)at   System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo方法,   对象目标,对象参数,签名sig,MethodAttributes   methodAttributes,RuntimeType typeOwner)at   System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags   invokeAttr,Binder binder,Object parameters,CultureInfo culture,   布尔值skipVisibilityChecks)at   System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags   invokeAttr,Binder binder,Object parameters,CultureInfo culture)at   Microsoft.Deployment.WindowsInstaller.CustomActionProxy.InvokeCustomAction(的Int32   sessionHandle,String entryPoint,IntPtr remotingDelegatePtr)   CustomAction安装返回实际的错误代码1603(注意这可能   如果翻译发生在沙箱内,则不是100%准确)

有人可以提供帮助吗?我想使用myDll.dll进行进一步安装,这是.msi文件的一部分。

1 个答案:

答案 0 :(得分:0)

您正在传递mydll.dll,这意味着它将尝试在运行DTF CA的当前目录/ temp目录中找到它。而是传递文件的文件密钥。 (File @ Id属性)。

name = [#myDLL.dll]这将格式化为类似C:\ Program Files \ My Company \ My Product \ myDLL.dll

另一种方法是将DLL添加到CA项目中,以便将其打包到CA中并在安装时解压缩到CA当前目录。