问题标签 [regsvr32]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如何使用 Regsvr32 注册 .NET COM DLL?
我有一个使用 COM DLL 的 VB6 应用程序。DLL 是用 C# 编写的。在 C# 项目属性中,我检查了“ Register for COM interop
”选项。VB6 应用程序在我的开发机器上运行良好。C# 代码完全遵循以下格式:CodeProject C# COM 示例
部署到其他机器Regsvr32.exe
时,尝试注册 DLL 时出现以下错误:
模块“MyCOM.dll”已加载,但未找到入口点 DLLRegisterServer。
这是什么意思?
我读过的关于 COM DLL 的任何教程/文档都没有提到“入口点 DLLRegisterServer ”。
我们RegAsm.exe
在不同的机器上使用时遇到了重大问题,所以我们真的需要一个可以运行的解决方案,regsvr32.exe
它适用于我们部署到的任何机器(即 XP、Vista、Windows 7、x86 机器、x64 机器等)
我需要在我的 C# 代码中添加什么以使其可以注册regsvr32.exe
?
dll - 如何在win 7 64位处理器上注册dll
亲爱的大家,我在 Windows 7 64 位处理器上注册 dll 时遇到问题,因为我已经使用了以下代码(regsvr32 dllname),但它给出了错误消息,所以你有任何想法请与我分享
dll - 如何在 Windows 7 64 位上注册 DLL 文件?
我尝试使用以下代码:
但这对我不起作用。如何在 64 位处理器的 Windows 7 上注册 DLL 文件?
c++ - 使用自定义 DirectShow 过滤器(DLL,已注册)
我编写了一个小型变换过滤器(派生自 TransInPlaceFilter 基类),并设法使其在 Directshow 图中正常工作,完全用 C++ 编码。我基本上遵循了MSDN上描述的 5 个第一步,以及第 6 步的最后一部分(为了在应用程序中直接使用过滤器)。
由于很多原因(包括能够在 GraphEdit 中使用过滤器),我需要将该过滤器导出到 DLL 中并进行注册。
我一直在尝试遵循这些步骤:设置“CreateInstance”方法、CFactoryTemplate 类、过滤器/引脚描述(AMOVIESETUP_FILTER、AMOVIESETUP_PIN、AMOVIESETUP_MEDIA)、注册/取消注册函数,最后是 DLLmain/入口点。
该代码成功编译并提供了一个 DLL,使用 Regsvr32 似乎可以毫无问题地注册。
但后来我无法使用过滤器:
- 它出现在 GraphEdit 的列表中,但是当我尝试插入它时失败:0x800401f9(“DLL 中的错误”)。
- 当我尝试在 C++ 中创建它时(使用
pCustomFilter.CoCreateInstance(CLSID_Custom)
,在定义正确的 GUID 之后),我收到错误 0x80040154 (REGDB_E_CLASSNOTREG)
我在这里很困惑。我是否错过了 DLL/注册代码中的某些内容?如果有任何用处,我将发布我正在使用的大部分代码。
任何帮助将不胜感激。
com - 在 Windows7 上,regsvr32 不写入 HKCR\CLSID
我使用 ATL 向导在 Visual Studio 2008 中创建了一个新的简单 COM 对象。该对象有一个单一的类和简单的方法。ATL 向导确实.rgs
为我的班级生成了文件。
当我regsvr32 Simple.dll
在我的 XP 机器上运行时,该类已注册,信息HKCR\Simple.SimpleObject
按HKCR\CLSID\{guid}
我预期的方式显示。
但是,在我的 64 位 Windows 7 机器上,情况就不一样了。我以管理员身份运行 regsvr32HKCR\Simple.SimpleObject
显示的部分。但是其中的部分 HKCR\CLSID
永远不会到达那里。因此我无法创建新实例。(绝望的我在 System32 和 SysWOW64 中都尝试了 regsvr32,效果相同。)
为什么不regsrv32
把数据放进去 HKCR\CLSID
?
c++ - 无法在 Windows 7 Enterprise x64 中注册 dll
试图注册一个用 Visual c++ 2005 构建的 DLL 和另一个用 Visual c++ 2008 构建的 DLL。系统配置是 windows 7 企业 64 位我尝试从默认位置和从运行 regsvr32c:\windows\syswow64
在任何一种情况下,我都会收到错误
我为 x86 和 x64 安装了 2005、2005 SP1、2008 的 C++ 可再发行运行时库。
visual-studio - dark.exe(来自 WiX)是从 MSI 中提取信息的可靠方法吗?
...如果是,为什么我不能使用SelfRegCost="0"
?
所以这可能有点哲学;)
基本问题是:我必须在安装过程中注册一个 ShellExtension DLL。当使用普通的旧 VS2008 部署时,我有一个自定义操作,它在我的 dll 上运行 regsvr32。然后在我的 WiX 设置中,我做了同样的事情,即使在卸载时使用了取消注册 (/u)。这工作正常。
直到前几天,我遇到了一些第三方 DLL 在卸载 Visual Studio 安装程序后失去注册的问题。我发现安装已经覆盖了 DLL 的默认位置。Register
我发现了将属性从更改为的可能性vsdrfCOMSelfReg
,vsdrfDoNotRegister
现在我的设置不再覆盖默认位置。
这让我想到我可以使用相同的属性来注册我的 ShellExtension DLL。因此,让我们在 VS 设置上使用 dark 并查看它的翻译vsdrfCOMSelfReg
是什么。我发现唯一的区别是标签SelfRegCost="0"
中的属性。File
但是根据这篇文章(How do you register a Win32 COM DLL file in WiX 3?)使用 SelfRegCost 是不好的,很多事情都出错了。可能。
现在我的理由是:要么
a) dark.exe 不是从 MSI 中提取信息的可靠方法,或者
b) 的使用SelfRegCost="0"
并不像大家想象的那么糟糕,因为 Visual Studio 一直以来都是这样吗?
c++ - regsvr32.exe 线程问题(WaitForMultipleObjects() 和 SetEvent())
我在安装过程中遇到了一些 regsvr32.exe 挂起的问题。一个 DLL,我们称之为 common.dll,使用 regsvr32.exe 注册为安装过程的一部分。Common.dll 使用另一个 DLL,utility.dll。
部分实用程序.dll 包含日志记录功能。此日志记录功能使用静态“计时器”对象来定期检查日志文件大小并相应地进行拆分。Timer 对象包含它自己的线程,用于触发计时器。记录器内的计时器对象是静态的,因此它用于多个记录器实例,这些记录器使用静态流指向同一个文件。
计时器有两个事件,一个计时器(使用 CreateWaitableTimer() 创建)和一个标准同步事件 (CreateEvent()),用于触发线程关闭。线程在构造函数 (_beginthreadex()) 中启动。在线程函数内部,有一个 WaitForMultipleObjects() 调用等待计时器和关闭事件。Wait...() 是 INFINITE,当设置了关闭事件 (SetEvent()) 时,线程函数返回。
(以上是作为背景提供的,作为解决方案的一部分,它的任何部分都不能更改,所有的DLL文件、记录器和计时器都可以正常工作)。
该问题在 regsvr32.exe 运行期间出现。它加载common.dll,后者加载utility.dll,后者初始化静态计时器线程对象。线程已正确启动,并到达线程函数内部的 WaitForMultipleObjects() 调用。一旦注册完成(几乎立即),就会调用计时器析构函数。析构函数在关闭事件上调用 SetEvent(),但 WaitForMultipleObjects() 永远不会返回。作为试图解决这个问题的一部分,我在 SetEvent() 调用之后立即调用了 WaitForSingleObject() 调用,等待关闭事件。这也永远不会回来,这让我相信事件本身存在问题。我有以下可能的解释:
- 时间问题。注册过程很快就结束了,因此线程可能进入了尚未准备好关闭的状态?该线程确实到达了 WaitForMultipleObjects() 调用,这让我相信这不是问题所在。
- regsvr32.exe 正在卸载 Utility.dll。我不太了解这一切是如何工作的,但是使用 ProcessExplorer 看起来 regsvr32.exe 在挂起时仍然加载了 dll,所以我认为这不是问题所在。
- 关机期间 regsvr32.exe 内的紧密循环。如果 regsvr32.exe 的销毁过程发生在一个紧密的循环中(即 while(NotShutdown()) 等),那么这可能不会为计时器线程放弃任何 cpu 时间,这可以解释挂起。
对这个问题还有什么想法吗?我已经搜索了互联网,但找不到与此问题相关的任何远程信息。
PS我知道问题的解决方案是使用静态指针并在实际需要时初始化计时器,这就是我要使用的解决方案。但是我仍然想了解为什么会发生这种情况,对我来说, SetEvent() 不起作用似乎完全荒谬。
windbg !locks 命令的输出:
windows-7 - Windows 7:无法注册 DLL - 错误代码:0X80004005
当我尝试注册 COM DLL 时,
我收到以下错误消息:
`模块 "c:\windows\system 32\"rpcrt4.dll" 已加载,但对 DllRegisterServer 的调用失败,错误代码为 0X80070006。
我该如何解决这个问题?请帮忙。