WIX:可执行文件在子目录中找不到 dll

朱加利奥

我正在尝试使用 Wix 创建一个 msi 并让安装文件夹使用给定的结构,在这种情况下,将第三方 dll 放在名为 lib 的子文件夹中。

问题是,MyApplication.exe 崩溃了。调试告诉我它找不到Interactions.dll。如果我将 dll 放在 INSTALLFOLDER 而不是子文件夹中,它就可以正常工作。

<Feature Id="ProductFeature" Title="MyApplication" Level="1">
    <ComponentGroupRef Id="Executable"/>
    <ComponentGroupRef Id="ProductComponents"/>
</Feature>

<Fragment>
  <Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramFilesFolder">
      <Directory Id="Organisation" Name="OrganizationFolder">
        <Directory Id="INSTALLFOLDER" Name="MyApplication">
          <Directory Id="lib" Name="lib"/>
        </Directory>
      </Directory>
    </Directory>
  </Directory>
</Fragment>

<Fragment>
  <ComponentGroup Id="Executable" Directory="INSTALLFOLDER">
    <Component Id="MyApplication.exe" Guid="*">
      <File Id="MyApplication.exe" Name="MyApplication.exe" Source="$(var.MyApplication_TargetDir)MyApplication.exe" Vital="yes" />
    </Component>
  </ComponentGroup>
</Fragment>

<Fragment>
  <ComponentGroup Id="ProductComponents" Directory="lib">
    <Component Id="Microsoft.Expression.Interactions.dll" Guid="*">
          <File Id="Microsoft.Expression.Interactions.dll" Name="Microsoft.Expression.Interactions.dll" Source="$(var.MyApplication_TargetDir)Microsoft.Expression.Interactions.dll" />
    </Component>
  </ComponentGroup>
</Fragment>
聚趣

这与 wix 无关,而是 .Net 运行时定位程序集的方式 - 它不知道您希望它在 lib 子目录中搜索 Microsoft.Expression.Interactions.dll。您可以在应用程序的配置文件中使用探测元素来告诉它在哪里可以找到此程序集和其他依赖程序集(有关详细信息,请参见此处):

<configuration>  
   <runtime>  
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
         <probing privatePath="lib"/>  
      </assemblyBinding>  
   </runtime>  
</configuration> 

另请注意,按照惯例,依赖程序集通常位于“bin”子目录中,而不是“lib”;至少这是 ASP .Net 使用的约定,因此您可以考虑自己使用该约定。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Pyinstaller 创建的可执行文件找不到 MEIPASS 目录中存在的 DLL

来自分类Dev

使用VS2010构建的可执行文件在System32中找不到DLL

来自分类Dev

找不到与命令“ dotnet-./..dll”匹配的可执行文件

来自分类Dev

找不到与命令“ dotnet-./..dll”匹配的可执行文件

来自分类Dev

尽管根目录中有正确的 DLL,但 Windows 可执行文件无法启动

来自分类Dev

如何在客户端可执行文件中嵌入MIDAS.DLL

来自分类Dev

python37.dll未在可执行文件中链接

来自分类Dev

外部可执行文件中的Visual Studio 2013调试dll进行更改

来自分类Dev

如何列出Linux中的所有可执行文件(目录,子目录,$ PATH)?

来自分类Dev

使用.dll文件,相对于.exe的.dll文件编译可执行文件

来自分类Dev

可执行文件加载与已加载的dll相同的dll

来自分类Dev

可执行文件加载与已加载的dll相同的dll

来自分类Dev

dll 不在我的可执行文件中,在 Visual Studio 中工作但不在执行中

来自分类Dev

在目录的子目录中编译几个程序,并使用makefile将可执行文件放置在不同的目录中

来自分类Dev

我可以引用.NET可执行文件,就像它是LINQPad 6中的DLL一样吗?

来自分类Dev

忽略程序集.dll与可执行文件所在的文件夹

来自分类Dev

通过查看MSIL确定.Net可执行文件调用的程序集/ DLL?

来自分类Dev

将.NET外部dll合并为单个可执行文件

来自分类Dev

将Qt DLL链接到多个可执行文件

来自分类Dev

如何在可执行文件和DLL之间使用OpenGL函数指针?

来自分类Dev

在可执行文件中使用嵌入式.dll

来自分类Dev

确定可执行文件是本机Windows还是cygwin1.dll

来自分类Dev

将Qt DLL链接到多个可执行文件

来自分类Dev

静态成员变量在可执行文件和 dll 之间不是全局的

来自分类Dev

为什么我需要不直接从我的可执行文件调用的 dll 的导入库?

来自分类Dev

如果没有 Boost DLL,Visual C++ 可执行文件将无法运行

来自分类Dev

找不到可执行文件

来自分类Dev

CMake:将静态库从子目录链接到另一个子目录中的可执行文件

来自分类Dev

Ubuntu在PATH中找不到可执行文件

Related 相关文章

  1. 1

    Pyinstaller 创建的可执行文件找不到 MEIPASS 目录中存在的 DLL

  2. 2

    使用VS2010构建的可执行文件在System32中找不到DLL

  3. 3

    找不到与命令“ dotnet-./..dll”匹配的可执行文件

  4. 4

    找不到与命令“ dotnet-./..dll”匹配的可执行文件

  5. 5

    尽管根目录中有正确的 DLL,但 Windows 可执行文件无法启动

  6. 6

    如何在客户端可执行文件中嵌入MIDAS.DLL

  7. 7

    python37.dll未在可执行文件中链接

  8. 8

    外部可执行文件中的Visual Studio 2013调试dll进行更改

  9. 9

    如何列出Linux中的所有可执行文件(目录,子目录,$ PATH)?

  10. 10

    使用.dll文件,相对于.exe的.dll文件编译可执行文件

  11. 11

    可执行文件加载与已加载的dll相同的dll

  12. 12

    可执行文件加载与已加载的dll相同的dll

  13. 13

    dll 不在我的可执行文件中,在 Visual Studio 中工作但不在执行中

  14. 14

    在目录的子目录中编译几个程序,并使用makefile将可执行文件放置在不同的目录中

  15. 15

    我可以引用.NET可执行文件,就像它是LINQPad 6中的DLL一样吗?

  16. 16

    忽略程序集.dll与可执行文件所在的文件夹

  17. 17

    通过查看MSIL确定.Net可执行文件调用的程序集/ DLL?

  18. 18

    将.NET外部dll合并为单个可执行文件

  19. 19

    将Qt DLL链接到多个可执行文件

  20. 20

    如何在可执行文件和DLL之间使用OpenGL函数指针?

  21. 21

    在可执行文件中使用嵌入式.dll

  22. 22

    确定可执行文件是本机Windows还是cygwin1.dll

  23. 23

    将Qt DLL链接到多个可执行文件

  24. 24

    静态成员变量在可执行文件和 dll 之间不是全局的

  25. 25

    为什么我需要不直接从我的可执行文件调用的 dll 的导入库?

  26. 26

    如果没有 Boost DLL,Visual C++ 可执行文件将无法运行

  27. 27

    找不到可执行文件

  28. 28

    CMake:将静态库从子目录链接到另一个子目录中的可执行文件

  29. 29

    Ubuntu在PATH中找不到可执行文件

热门标签

归档