让 RDS.Dataspace 对象与 Windows 10 一起工作
Getting RDS.Dataspace object to work with Windows 10
是否可以让 RDS.Dataspace 对象 (VB6 COM) 在 Windows 10 上工作?
我在旧的 vb6 应用程序中有一些代码...
Set ds = CreateObject("RDS.DataSpace")
ds.InternetTimeout = 30000000
Set ComObj = ds.CreateObject("MyComName.MyClassMod", "\127.0.0.1")
这在 Windows 7 机器和 Windows Server 2012 R2 机器上都工作得很好。但是出于某种原因,当我尝试在我的 Windows 10 机器开发机器上 运行 它时,我通常会在最后一行出现以下错误之一...
Runtime error '4100': Method 'CreateObject' of object 'IDataspace' failed
或...
Runtime error '4100': Method '~' of object '~' failed
我已尝试(但不限于)以下列表中的内容...
- 正在将三个 dll(msadcf.dll、msadcfr.dll、msadcs.dll)添加到目录
C:\Program Files (x86)\Common Files\system\msadc\
,因为它们不存在。
- 注销然后使用 regsvr32 注册 #1 中的文件。
- 将与这些文件(handler.reg、handsafe.reg)一起找到的两个注册表文件添加到注册表。
- 尽可能禁用 DEP。
- 正在组件服务中禁用 "Enforce access checks for this application"。在应用程序属性区域中找到。
- 将名称设置为我的域管理员普通用户帐户,并尝试将用户设置为我创建的具有本地管理员权限的新帐户。
- 尝试在没有 IIS 运行ning 的情况下使用“\127.0.0.1”,并尝试在 IIS 运行ning 中使用“http://127.0.0.1”。
- 在我的桌子上敲我的头。
- 将注册表项 (MyComName.MyClassMod) 添加到注册表中的
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\
项以注册 COM 对象。
- 使用
Procmon.exe
追踪问题。
- 正在禁用 Windows 防火墙。
- 检查事件查看器是否有任何帮助。
我就是无法让这些老东西发挥作用!有没有人在 Windows 10 上遇到过 COM 对象?如果是,请告诉我我做错了什么!
这个问题不像 What does "Method '~' of object '~' failed" mean?
问题。它被标记为已回答,但不会解决此问题。我正在使用完全相同的 dll、exe、ocx 等文件。这与配置错误或缺少某些东西有关。就是不知道是哪一个
经过一些互联网搜索,似乎在 Windows 8 之后,DataSpace
对象不再包含在 Windows OS.
From https://docs.microsoft.com/...
Beginning with Windows 8 and Windows Server 2012, RDS server components are no longer included in the Windows operating system (see Windows 8 and Windows Server 2012 Compatibility Cookbook for more detail). RDS client components will be removed in a future version of Windows. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Applications that use RDS should migrate to WCF Data Service.
所以基本上,您无法创建您的对象,因为您的对象实际上已经不存在了。
就像 K.Davis 在他的回答中所说的那样,MSADC 在 Windows 上不再受支持。因此,让我的旧软件在 Windows 10 上运行的目标很简单,我只需要像在 Windows.
的早期版本中一样添加回 MSADC
这可能不是每个人都想做的事情,但我已经这样做了很多次并且没有任何问题。
有些文件我不得不从旧的 OS(我认为是 Windows 7)中提取,但在 Windows 10 中丢失了。我也包含了它们作为安装脚本 (install.bat) 在 Windows 10.
上安装 MSADC
我用所有相关文件制作的安装程序可以从My Google Drive下载。
位于上面下载中的批处理脚本 (install.bat) 具有以下内容...
@ECHO OFF
CLS
SET "MSADCPATH=%COMMONPROGRAMFILES(X86)%\system\msadc"
ECHO Copying files to "%MSADCPATH%"...
copy /Y handler.reg "%MSADCPATH%"
copy /Y handsafe.reg "%MSADCPATH%"
copy /Y msadcf.dll "%MSADCPATH%"
copy /Y msadcfr.dll "%MSADCPATH%"
copy /Y msadcs.dll "%MSADCPATH%"
ECHO.
ECHO Importing registry entries...
REG import handler.reg
REG import handsafe.reg
ECHO.
ECHO Registering files...
ECHO registering msadcf.dll...
regsvr32 /s /u "%MSADCPATH%\msadcf.dll"
regsvr32 /s "%MSADCPATH%\msadcf.dll"
ECHO [done]
ECHO registering msadcfr.dll...
regsvr32 /s /u "%MSADCPATH%\msadcfr.dll"
regsvr32 /s "%MSADCPATH%\msadcfr.dll"
ECHO [done]
ECHO registering msadcs.dll...
regsvr32 /s /u "%MSADCPATH%\msadcs.dll"
regsvr32 /s "%MSADCPATH%\msadcs.dll"
ECHO [done]
ECHO registering msdfmap.dll...
regsvr32 /s /u "%MSADCPATH%\msdfmap.dll"
regsvr32 /s "%MSADCPATH%\msdfmap.dll"
ECHO [done]
ECHO.
是否可以让 RDS.Dataspace 对象 (VB6 COM) 在 Windows 10 上工作?
我在旧的 vb6 应用程序中有一些代码...
Set ds = CreateObject("RDS.DataSpace")
ds.InternetTimeout = 30000000
Set ComObj = ds.CreateObject("MyComName.MyClassMod", "\127.0.0.1")
这在 Windows 7 机器和 Windows Server 2012 R2 机器上都工作得很好。但是出于某种原因,当我尝试在我的 Windows 10 机器开发机器上 运行 它时,我通常会在最后一行出现以下错误之一...
Runtime error '4100': Method 'CreateObject' of object 'IDataspace' failed
或...
Runtime error '4100': Method '~' of object '~' failed
我已尝试(但不限于)以下列表中的内容...
- 正在将三个 dll(msadcf.dll、msadcfr.dll、msadcs.dll)添加到目录
C:\Program Files (x86)\Common Files\system\msadc\
,因为它们不存在。 - 注销然后使用 regsvr32 注册 #1 中的文件。
- 将与这些文件(handler.reg、handsafe.reg)一起找到的两个注册表文件添加到注册表。
- 尽可能禁用 DEP。
- 正在组件服务中禁用 "Enforce access checks for this application"。在应用程序属性区域中找到。
- 将名称设置为我的域管理员普通用户帐户,并尝试将用户设置为我创建的具有本地管理员权限的新帐户。
- 尝试在没有 IIS 运行ning 的情况下使用“\127.0.0.1”,并尝试在 IIS 运行ning 中使用“http://127.0.0.1”。
- 在我的桌子上敲我的头。
- 将注册表项 (MyComName.MyClassMod) 添加到注册表中的
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\
项以注册 COM 对象。 - 使用
Procmon.exe
追踪问题。 - 正在禁用 Windows 防火墙。
- 检查事件查看器是否有任何帮助。
我就是无法让这些老东西发挥作用!有没有人在 Windows 10 上遇到过 COM 对象?如果是,请告诉我我做错了什么!
这个问题不像 What does "Method '~' of object '~' failed" mean?
问题。它被标记为已回答,但不会解决此问题。我正在使用完全相同的 dll、exe、ocx 等文件。这与配置错误或缺少某些东西有关。就是不知道是哪一个
经过一些互联网搜索,似乎在 Windows 8 之后,DataSpace
对象不再包含在 Windows OS.
From https://docs.microsoft.com/...
Beginning with Windows 8 and Windows Server 2012, RDS server components are no longer included in the Windows operating system (see Windows 8 and Windows Server 2012 Compatibility Cookbook for more detail). RDS client components will be removed in a future version of Windows. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Applications that use RDS should migrate to WCF Data Service.
所以基本上,您无法创建您的对象,因为您的对象实际上已经不存在了。
就像 K.Davis 在他的回答中所说的那样,MSADC 在 Windows 上不再受支持。因此,让我的旧软件在 Windows 10 上运行的目标很简单,我只需要像在 Windows.
的早期版本中一样添加回 MSADC这可能不是每个人都想做的事情,但我已经这样做了很多次并且没有任何问题。
有些文件我不得不从旧的 OS(我认为是 Windows 7)中提取,但在 Windows 10 中丢失了。我也包含了它们作为安装脚本 (install.bat) 在 Windows 10.
上安装 MSADC我用所有相关文件制作的安装程序可以从My Google Drive下载。
位于上面下载中的批处理脚本 (install.bat) 具有以下内容...
@ECHO OFF
CLS
SET "MSADCPATH=%COMMONPROGRAMFILES(X86)%\system\msadc"
ECHO Copying files to "%MSADCPATH%"...
copy /Y handler.reg "%MSADCPATH%"
copy /Y handsafe.reg "%MSADCPATH%"
copy /Y msadcf.dll "%MSADCPATH%"
copy /Y msadcfr.dll "%MSADCPATH%"
copy /Y msadcs.dll "%MSADCPATH%"
ECHO.
ECHO Importing registry entries...
REG import handler.reg
REG import handsafe.reg
ECHO.
ECHO Registering files...
ECHO registering msadcf.dll...
regsvr32 /s /u "%MSADCPATH%\msadcf.dll"
regsvr32 /s "%MSADCPATH%\msadcf.dll"
ECHO [done]
ECHO registering msadcfr.dll...
regsvr32 /s /u "%MSADCPATH%\msadcfr.dll"
regsvr32 /s "%MSADCPATH%\msadcfr.dll"
ECHO [done]
ECHO registering msadcs.dll...
regsvr32 /s /u "%MSADCPATH%\msadcs.dll"
regsvr32 /s "%MSADCPATH%\msadcs.dll"
ECHO [done]
ECHO registering msdfmap.dll...
regsvr32 /s /u "%MSADCPATH%\msdfmap.dll"
regsvr32 /s "%MSADCPATH%\msdfmap.dll"
ECHO [done]
ECHO.