【问题标题】:Wix custom-action dll after files installed at execution执行时安装文件后的 Wix 自定义操作 dll
【发布时间】:2013-12-01 06:53:06
【问题描述】:

我正在使用 dll 来安装打包在 msi 中的驱动程序。 以下是sn-p:

<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:已引发异常 通过调用的目标。 ---> System.DllNotFoundException: 无法加载 DLL 'myDll.dll':指定的模块不能 成立。 (来自 HRESULT 的异常:0x8007007E)在 CustomAction2.CustomActions.ConfigDriver(IntPtr hwndParent, UInt16 fRequest,字符串 lpszDriver,字符串 lpszArgs,字符串 lpszMsg,UInt16 cbMsgMax、Int64 和 pcbMsgOut)在 CustomAction2.CustomActions.CustomAction1(Session session) --- 结束 内部异常堆栈跟踪 --- 在 System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo 方法、对象目标、对象参数、SignatureStruct& sig、 MethodAttributes methodAttributes, RuntimeType typeOwner) 在 System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo 方法, 对象目标、对象参数、签名信号、方法属性 方法属性,RuntimeType typeOwner) 在 System.Reflection.RuntimeMethodInfo.Invoke(对象 obj,BindingFlags invokeAttr、Binder binder、Object 参数、CultureInfo 文化、 Boolean skipVisibilityChecks)在 System.Reflection.RuntimeMethodInfo.Invoke(对象 obj,BindingFlags invokeAttr、Binder binder、Object 参数、CultureInfo 文化)在 Microsoft.Deployment.WindowsInstaller.CustomActionProxy.InvokeCustomAction(Int32 sessionHandle, String entryPoint, IntPtr remotingDelegatePtr) CustomAction Install 返回实际错误代码 1603(注意这可能 如果翻译发生在沙箱内,则不是 100% 准确)

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

【问题讨论】:

    标签: c# dll wix windows-installer


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢 Christopher,DLL 是非托管的,所以我不能将它添加到我的 CA 项目中
    • 您可以将其添加为内容副本 |总是。
    • 怎么做,请告诉我
    • 与 Visual Studio 中的任何 C# 项目相同。右键单击项目,添加 |现有项目 |基于 . 过滤并选择您的 DLL 并单击“确定”。然后在项目中选择您的 DLL,并在属性中验证 Build Action 是 Content 并将 Copy to Output Directory 设置为 Copy Always。现在,当您构建 CA 时,DLL 将包含在 .CA.DLL 中并提取到当前目录并在您的 CA 执行生命周期中可用。
    猜你喜欢
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2020-07-05
    • 2019-02-22
    相关资源
    最近更新 更多