首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSI设置自动复制Shell32.dll,导致问题

MSI设置自动复制Shell32.dll,导致问题
EN

Stack Overflow用户
提问于 2013-10-22 03:21:26
回答 2查看 897关注 0票数 1

应用程序需要使用COM引用Microsoft Shell Control And Automation,它位于C:\Windows\system32\shell32.dll

但是在添加了引用之后,VS 2010在目标构建目录中添加了一个dll Interop.Shell32.DLL。一切都很好。但是当构建MSI安装向导项目时。它将shell32.dll添加为依赖项。好吧,没问题。

但是在安装时,它也会在目标安装目录中复制shell32.dllInterop.Shell32.DLL,现在当应用程序运行时会显示出奇怪的错误。但是,如果我从安装目录中手动删除shell32,一切都正常。

为什么MSI要在安装目录中复制shell32.dll?64位操作系统需要它吗?如果是,为什么是Interop.Shell32.DLL?对于我的应用程序,shell32.dll似乎是个问题,有什么办法可以避免它被复制吗?

编辑:

我将shell32.dll排除在安装项目之外,在64位操作系统中会出现问题吗?

Edit2:shell32.dllC:\Windows\system32\上实际上是5KB,但是MSI复制11 MB的一个。这是什么?

EN

回答 2

Stack Overflow用户

发布于 2013-10-22 08:36:19

您必须防止安装程序复制shell32.dll 32.dll。它是Windows中始终包含的关键操作系统DLL。拥有错误版本的fatal 32.dll是一个相当致命的问题。Windows内置的文件系统保护功能将防止它覆盖c:\windows\ system 32中的文件系统,但无法阻止本地副本破坏您的程序。是的,它是很多兆字节,它看起来只是安装在c:\windows\system32 32中。这实际上是一个指向实际位置的硬链接,它存储在c:\windows\winsxs中。system32中的大多数文件实际上都是硬链接,否则是一种简单的机制,可以防止错误的安装程序破坏操作系统。

Shell32.dll程序集是由Tlbimp.exe生成的互操作程序集。它只包含带有ComImport指令的声明,即从shell32.dll 32.dll中的类型库中检索并转换为等效.NET声明的声明。使CLR可以轻松地实现RCW,而不必读取类型库本身。您必须部署互操作程序集。

不知道这里出了什么问题,安装程序创建者实用程序也自动复制互操作程序的本机DLL是不正常的。但你必须介入,阻止它这样做。

票数 2
EN

Stack Overflow用户

发布于 2013-10-22 03:23:47

您可以添加引用,然后设置此引用的属性。

复制本地设置为False

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19508418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档