如何在 Windows 10 中的 cmd 中使用 regsvr32 加载 DLL?

如何在 Windows 10 中的 cmd 中使用 regsvr32 加载 DLL?

从我之前的问题来看,SOLIDWORKS 错误代码:1722 CA:Register_DocMgrDLL,我缺少该swdocumentmgr.dll库。所以我从https://error-dll.info/file/swdocumentmgrdll并将其粘贴到C:\Program Files\Common Files\SOLIDWORKS Shared目录中。当我尝试通过

C:\Windows\System32>regsvr32 "C:\Program Files\Common Files\SOLIDWORKS Shared\swdocumentmgr.dll"

我得到: The module C:\Program Files\...\swdocmentmgr.dll failed to load, make sure the binary is stored in specified path。但它在路径中(在目录中)。我甚至尝试使用管理员权限执行此操作,但无济于事。那么我应该如何加载该库以安装 solidworks?

我已尝试cd在库目录中进行但仍然出现相同的错误:

C:\>cd "C:\Program Files (x86)\Common Files\SOLIDWORKS Shared"

C:\Program Files (x86)\Common Files\SOLIDWORKS Shared>dir
 Volume in drive C is Windows
 Volume Serial Number is D4F4-75C5

 Directory of C:\Program Files (x86)\Common Files\SOLIDWORKS Shared

10/20/2020  04:28 PM    <DIR>          .
10/20/2020  04:28 PM    <DIR>          ..
10/20/2020  04:28 PM                 0 dir
10/19/2020  05:51 PM    <DIR>          Service
10/20/2020  01:34 PM         6,325,544 swdocumentmgr.dll
               2 File(s)      6,325,544 bytes
               3 Dir(s)  28,109,045,760 bytes free

C:\Program Files (x86)\Common Files\SOLIDWORKS Shared>regsvr32 swdocumentmgr.dll

the module swdocumentmgr.dll failed to load即使在目录中也会出现相同的错误

我不知道是否可以通过注册 dll 库regsvr32.exe,但这至少是 SolidWorks 安装程序正在尝试执行的操作:

17:57:04    Error   Status  149 0   "Product:SOLIDWORKS ErrorCode:1722 CA:Register_DocMgrDLL.A48C1CF2_EBF8_48E8_ACAD_68CA04F776A2 Location:C:\Windows\system32\ Command:regsvr32 "regsvr32 “C:\Program Files\Common Files\SOLIDWORKS Shared\swdocumentmgr.dll" /s"
17:57:46    Warning Message 9   55200   "Dialog Shown: {0: Internal error: The Windows Installer for this product component did not run as expected: Register_DocMgrDLL.A48C1CF2_EBF8_48E8_ACAD_68CA04F776A2.: Contact Technical Support.}.  User selected: {1: 1}"
17:58:21    Info    Status  58  55803   "Received data from Installation Manager server (Script: {0: http://im.solidworks.com/2019/Connect.aspx?Release=20190-40500-1100-100&Debug=0&ini=0&osa=8192:0:2&lid=1033&app=I&cx=4097:6&cm=-1&lfr=&lfp=&lfv=}, Code: {1: 0}, Error: {2: }, File: {3: <none>})"
18:00:02    Error   Status  156 0   "***START DUMP OF WINDOWS INSTALLER DATA***"
...

强调这一部分

Command:regsvr32 "regsvr32 “C:\Program Files\Common Files\SOLIDWORKS Shared\swdocumentmgr.dll" /s"

因此安装程序肯定正在尝试执行regsvr32.exeswdocumentmgr.dll。(因此,当我第一次遇到错误时,我尝试按照上面所示的方式自行注册,当我无法手动注册时,那么安装程序也无法注册也就不足为奇了)。

编辑:有哪些库(与我现在拥有的 solidwork 相关):

c:\Windows\SysWOW64\zlib.dll
c:\Program Files (x86)\Common Files\SOLIDWORKS Shared\zlib.dll
c:\Windows\SysWOW64\swdocumentmgr.dll
c:\Program Files (x86)\Common Files\SOLIDWORKS Shared\swdocumentmgr.dll

答案1

编辑:看来,发帖人的 Windows 10(以及我的)上出现此问题是因为升级了 Windows 10 系统。也许是以前的一些软件残留导致了此问题。对于发帖人而言,完全重新安装 Windows 10 已“解决”此问题。


我研究过这个 DLL,但我认为它在 Windows 10 上不可用。

我首先查看了为 Dassault Systemes SolidWorks Corp. 创建的签名数字证书,有效期为 2007 年 6 月至 2012 年 6 月。证书已过期,但这应该不是问题,因为过期的证书仍然有效。为了以防万一,我以数字方式重新签名了 DLL,但这并没有改变任何东西。

然后,我研究了缺少依赖项的问题,并将 DLL 加载到 Dependency Walker 中,这给了我一堆错误。令我担心的错误是:

错误:由于隐式依赖模块中缺少导出函数,至少有一个模块存在未解析的导入

此消息表示 DLL(或其导入的 DLL)从另一个 DLL(称为 )导入bad.dll。当 Dependency Walker 扫描 时bad.dll,它发现它没有导出所需的函数。缺少此导出很可能是regsvr32无法加载 DLL 以进行注册的原因。

换句话说,DLL 引用了不再存在的 Windows API 函数。

为了进一步验证,我使用PEStudio分析了该DLL,发现了很多它不喜欢的细节,其中最严重的是:

The count of imports is suspicious,count: 1264
The file imports deprecated function(s),count: 54
The file imports undocumented function(s),count: 1
The file imports anonymous function(s),count: 605

这里让我担心的是匿名函数的数量,即 Windows DLL 中的条目是通过其序号而不是名称引用的。如果在 Windows 的更高版本中序号发生了变化,这可能会造成严重破坏。

从数字签名的日期来看,我可以说 SolidWorks 软件是在 Windows Vista 或最早期的 Windows 7 上开发的。问题不可能出在错误的 Visual C++ 可再发行组件上,因为我的计算机上基本上安装了所有版本,包括 2005 年版。

与 Windows 10 相比,创建 Windows Vista 或 Windows 7 的虚拟机并在其中安装 SolidWorks 可能会更好。

答案2

看起来好像您在 64 位系统上遇到了针对 32 位二进制文​​件的某种形式的 Windows 自动路径重定向机制。

尝试这个:

  • 使用管理员权限启动命令提示符或 PowerShell(无论如何都需要注册 DLL)。
  • 将当前目录更改为 DLL 所在的文件夹,然后运行 ​​regsvr32,同时指定 DLL 名称没有一条路径。

相关内容