C# (Wix安装程序)如何包含自定义操作依赖项

C# (Wix安装程序)如何包含自定义操作依赖项,c#,c++,dependencies,wix,windows-installer,C#,C++,Dependencies,Wix,Windows Installer,我在安装解决方案中得到了3个项目: 用c#编写的自定义操作dll 用c编写的自定义动作dll++ 用C++编写的Util DLL也(C++语言和C++语言使用) 互操作) 问题是如何将Util.dll添加到wix安装程序中 当我将此dll复制/粘贴到C:\ProgramFiles\SystemWOW64\(msiexec.exe目录)时,一切正常,但这是一个我希望避免的糟糕的解决方法 我所尝试的: 1) 添加为MSI项目的参考,包括: <?xml version="1.0" enco

我在安装解决方案中得到了3个项目:

  • 用c#编写的自定义操作dll
  • 用c编写的自定义动作dll++
  • 用C++编写的Util DLL也(C++语言和C++语言使用) 互操作)
  • 问题是如何将Util.dll添加到wix安装程序中

    当我将此dll复制/粘贴到C:\ProgramFiles\SystemWOW64\(msiexec.exe目录)时,一切正常,但这是一个我希望避免的糟糕的解决方法

    我所尝试的: 1) 添加为MSI项目的参考,包括:

       <?xml version="1.0" encoding="utf-8"?>
       <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
          <Fragment>
             <Binary Id="CPlusPlusAction" SourceFile="$(var.CPlusPlusAction.TargetDir)$(var.CPlusPlusAction.TargetName).CA.dll"/>
             <Binary Id="CSharpAction" SourceFile="$(var.CSharpAction.TargetPath)"/>
             <Binary Id="Utils" SourceFile="$(var.SolutionDir)/$(var.Utils.Configuration)/Utils.dll"/>
             <CustomAction Id="FunctionOne" Impersonate="no" Return="ignore" Execute="commit" BinaryKey="CPlusPlusAction" DllEntry="FunctionOne" />
             <CustomAction Id="FunctionTwo" Impersonate="no" Return="ignore" Execute="commit" BinaryKey="CSharpAction" DllEntry="FunctionTwo"/>
          </Fragment>
      </Wix>
    
    
    
    2) 添加为对CopyLocal=true的两个项目的引用

    我在谷歌上搜索了很多,但仍然找不到解决方案(、StackOverflow、msdn等)

    提前感谢

    提供了C#管理的自定义操作,我认为您无法添加本机dll作为参考。因此,取而代之的是将其作为内容添加到action copy中,我很确定DTF会将其打包,并在自定义操作执行时使其在临时目录(流程的当前目录)中可用


    <> P> C++,我使用IsStudio.DLL/ISStUpFILE模式,如果可以的话,可以静态链接库。

    谢谢大家的回答,但最后我想出来了。 首先,需要将此Util.dll添加到Msi二进制表:

    <Binary Id="Utils" SourceFile="$(var.SolutionDir)/$(var.Utils.Configuration)/Utils.dll"/>
    
    
    
    如果您不确定是否使用Orca在.msi文件中查看它

    其次,正如Christopher对c所说的,它的功能是右键单击->添加现有项目->Utill.dll,然后DFS在安装过程中将其解压缩到c:/windows/installation/“CustomActionId”中,一切都正常,但是

    问题是用C++侧,WIX不是用于这种语言,所以在安装过程中需要注意所有的事情,例如编写代码,它将读取安装程序的二进制表,读取数据并清除所有代码,其中有很多代码

    所以我更喜欢为util编写CLR包装器,
    将Util构建为LIB,因此C++的边构建CA.DLL,并将其作为LIB添加到包装器,因此现在您可以使用C.P.P.DLL在C*

    中可能是愚蠢的,但是您可以尝试为它添加自定义操作,而不只是对动作进行排序吗?我不推荐托管代码。如果你可以使用C++,但是如果你发生了什么,请点击“自定义操作项目< /代码>,2”选择“代码>添加<代码> >代码> = > >代码>代码>现有项目…<代码> >代码> = > > /代码> 3)代码>添加C++ DLL < /代码>?重新生成并在输出窗口中查看dll是否编译为托管代码(DTF)的
    FileName.CA.dll
    Win32 wrapper dll。可能还需要注意任何位问题。又是2007年吗?现在,托管自定义操作很好。DTF为您打包了依赖项,使这个问题成为现实。