![如何在 Windows 10 中的 cmd 中使用 regsvr32 加载 DLL?](https://linux22.com/image/1635313/%E5%A6%82%E4%BD%95%E5%9C%A8%20Windows%2010%20%E4%B8%AD%E7%9A%84%20cmd%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20regsvr32%20%E5%8A%A0%E8%BD%BD%20DLL%EF%BC%9F.png)
从我之前的问题来看,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.exe
库swdocumentmgr.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 名称没有一条路径。