关于局域网远程调用进程外com组件遇到的问题

由于64位程式不能调用32位dll,所以使用com组件调用dll。现在需要在一台电脑调用另一台电脑的com组件。会遇到 拒绝访问 的问题。

由于com过于老旧,导致网上资料不多。

首先查看服务器的安全日志,查找是否成功登录另一服务器pc。

全局条件:

1、 服务端与客户端要在同一局域网内,且处于同一网段。

2、 服务端与客户端均要启用Guest账号。

3、 服务端与客户端均要用Administrator账号登陆,且登陆密码要设置为相同。

4、 关闭服务端和客户端的防火墙。

5、 通过ping命令测试服务端和客户端网络连接正常。

6、服务端和客户端都能够成功访问对方的共享文件夹。

(提示不允许使用空密码:【安全设置】→【本地策略】→【安全选项】→右侧找到【帐户-使用空密码的本地帐户只允许进行控制台登录】→将该安全设置改为【已禁用】)

二、服务端配置

A、DCOM配置

1、 “开始 -> 运行”,键入“dcomcnfg”命令,开启“组件服务”配置。

2、 左侧导航栏展开“组件服务 -> 计算机 -> 我的电脑”,右键单击“我的电脑”,选择“属性”菜单,弹出“我的电脑属性”配置框。如果单击“我的电脑”没有“属性”菜单,则需要在系统服务管理器中将“DistributedTransaction Coordinator”服务开启。

3、“默认属性”页面,勾选“在此计算机上启用分布式COM(E)”,“默认身份验证级别”选择“连接”,“默认模拟级别”选择“标识”。

4、“COM 安全”页面,点击“访问权限”区域里的“编辑限制”按钮,弹出“访问权限”设置框,添加“Administrators、Everyone、Guests、INTERACTIVE、ANONYMOUS LOGON”账号,允许所有账号的所有权限,点击“确定”按钮。同样点击“启动和激活权限”区域里的“编辑限制”按钮,弹出“访问权限”设置框,添加“Administrators、Everyone、Guests、INTERACTIVE、ANONYMOUS LOGON”账号,允许所有账号的所有权限,点击“确定”按钮。

5、 点击“我的电脑属性 -> 确定”,完成配置。

6、左侧导航栏“组件服务 -> 计算机 -> 我的电脑 -> DCOM 配置”,选择目标服务(此处以“EADS TETRA Connectivity Server API, Release 5.5”一项为例),邮件选择“属性”菜单,在弹出配置框的“常规”页面的“身份验证级别”选择“连接”。

7、 “位置”页面,如果“在此计算机上运行应用程序”复选框可选,则选上。

8、“安全”页面,“启动和激活权限”区域,选择“自定义”,点击“编辑”按钮,添加“Administrators、Everyone、INTERACTIVE、ANONYMOUS LOGON”账号,允许所有账号的所有权限,点击“确定”按钮。同样“访问权限”区域,选择“自定义”,点击“编辑”按钮,添加“Administrators、Everyone、ANONYMOUS LOGON”账号,允许所有账号的所有权限,点击“确定”按钮。

9、 “标识”页面,选择“交互式用户”。点击“确定”完成配置。

B、策略配置

1、“开始 -> 管理工具-> 本地安全策略”,开启“本地安全策略”配置。

2、点击左侧导航栏“本地策略 -> 审核策略”,右侧策略列表中,右键点击“审核登陆事件”选择“属性菜单”,“本地安全设置”页面,勾选“成功”、“失败”复选框,点击“确定”按钮退出。相同的方法设置“审核对象访问”和“审核特权使用”。

三、客户端配置

客户端配置就简单了,基本不用配置,只要将依赖的COM注册一下就可以了。

我到这里后仍不能访问,依然E_ACCESSDENIED ,在服务端于是使用 事件查看器 寻找原因

查看系统发现有一个错误 :

“服务器端身份验证级别策略不允许用户 %1\%2 SID (%3) 地址 %4 激活 DCOM 服务器。 请至少将激活身份验证级别提高到客户端应用程序中的RPC_C_AUTHN_LEVEL_PKT_INTEGRITY。”

那应该有两种方法,1修改服务端身份验证级别策略;2提升客户端的level。我这里采取第二种。

然后遇到新的错误:REGDB_E_IIDNOTREG Interface not registered

搜索错误码并未找到太多有用信息,之前本地测试遇到要注册代理/存根没管也能运行,去google了一下确实跨机器要注册代理存根,编译器已自动生成文件,生成dll后c/s分别注册就好,进入目录regsvr32  xxxPs.dll(可能要管理员权限)

然后遇到新的错误:REGDB_E_CLASSNOTREG Class not registered

搜索错误码并未发现什么有用的信息,有一条是说x64平台改x86平台就可以了。我的平台并不能改,之前生成的代理存根确实是x86平台的,将demo改成x86平台调用完全可以。推断代理/存根需要和demo的平台一致。于是生成64位的代理/存根,c/s端分别注册,64位程序调用成功。           服务端pc:32位dll,32位com组件,64位代理/存根;                                                                       客户端pc:64位demo,64位代理存根;

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VB是Visual Basic的缩写,是一种常用的编程语言。局域网远程桌面是指在同一个局域网内的计算机之间通过网络远程访问和控制其他计算机桌面的功能。 在VB中,要实现局域网远程桌面功能,可以通过Socket编程来进行网络通信。首先,需要在VB中创建一个服务端程序和一个客户端程序。 服务端程序负责监听局域网内其他计算机的连接请求,并接受来自客户端的连接。在VB中,可以使用Socket对象来实现这个功能。服务端程序需要创建一个Socket对象,并绑定到本地IP地址和端口上,然后通过调用Listen方法开始监听连接请求。当有客户端连接时,服务端程序可以通过Accept方法接受连接,并创建一个新的线程来处理这个连接。 客户端程序负责与服务端建立连接,并传输数据。在VB中,客户端程序需要创建一个Socket对象,并调用Connect方法连接到服务端的IP地址和端口。连接成功后,客户端程序可以通过Send方法向服务端发送数据,也可以通过Receive方法接收服务端传输过来的数据。 实现局域网远程桌面的关键是通过网络传输图像和响应用户的操作。可以使用屏幕捕获技术将当前计算机屏幕的图像数据传输到另一个计算机上,并在另一个计算机上显示出来。用户在另一个计算机上的操作也需要传输到当前计算机上进行处理。这个过程可以通过在服务端和客户端程序中添加相关的图像处理和事件监听代码来实现。 总之,通过VB编程,可以实现局域网远程桌面的功能。通过Socket编程建立服务端和客户端的连接,通过图像传输和事件监听实现远程访问和控制其他计算机桌面的目标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值