使RDS.Dataspace对象与Windows 10一起使用

时间:2018-02-05 23:51:11

标签: windows dll com vb6

是否可以让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机器时,我通常会在最后一行得到以下错误之一......

  

运行时错误'4100':对象'IDataspace'的方法'CreateObject'失败

...或

  

运行时错误'4100':对象'〜'的方法'〜'失败

我已尝试(但不限于)以下列表中的内容......

  1. 将三个dll(msadcf.dll,msadcfr.dll,msadcs.dll)添加到目录C:\Program Files (x86)\Common Files\system\msadc\,因为它们不存在。
  2. 取消注册,然后使用regsvr32从#1注册文件。
  3. 将与这些文件(handler.reg,handsafe.reg)一起找到的两个注册表文件添加到注册表中。
  4. 尽可能禁用DEP。
  5. 在组件服务中禁用“对此应用程序执行访问检查”。在应用程序属性区域中找到。
  6. 将标识设置为我的普通用户帐户,即Domain Admin,并尝试将用户设置为我使用本地管理员权限创建的新帐户。
  7. 在没有运行IIS的情况下尝试使用“\ 127.0.0.1”,并在IIS运行时尝试“http://127.0.0.1”。
  8. 在我的桌子上打我的头。
  9. 在注册表中将密钥(MyComName.MyClassMod)添加到Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ADCLaunch\密钥以注册COM对象。
  10. 使用Procmon.exe来追踪问题。
  11. 禁用Windows防火墙。
  12. 检查事件查看器以获取有用的任何内容。
  13. 我只是不能让这个旧东西工作!有没有人在Windows 10上运行COM对象?如果是这样,请告诉我我做错了什么!

    此问题与What does "Method '~' of object '~' failed" mean?问题不同。它标有答案,但答案无法解决此问题。我正在使用EXACT相同的dll,exe,ocx等文件。这与错误配置或缺少的东西有关。我只是不知道它是哪一个。

2 个答案:

答案 0 :(得分:0)

看来,在Windows 8之后进行一些互联网搜索时,Windows操作系统中不再包含DataSpace对象。

  

来自https://docs.microsoft.com/...

     
    

从Windows 8和Windows Server 2012开始,Windows操作系统中不再包含RDS服务器组件(有关详细信息,请参阅Windows 8和Windows Server 2012 Compatibility Cookbook)。将来的Windows版本中将删除RDS客户端组件。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。使用RDS的应用程序应迁移到WCF Data Service

  

基本上,你无法创建你的对象,因为你的对象实际上不再存在了。

答案 1 :(得分:0)

因此,就像K.Davis在回答中所说的那样,Windows不再支持MSADC。因此,使我的旧软件在Windows 10上运行的目标很简单,我只需要像以前的Windows版本一样重新添加MSADC。

这可能不是每个人都想做的,但是我已经做了很多次了,并且没有任何问题。

我不得不从Windows 10中丢失一些从较旧的操作系统(我认为是Windows 7)中提取的文件,我包括了它们以及安装脚本(install.bat),以便在Windows上安装MSADC。 10。

我使用所有相关文件制作的安装程序都可以从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.