我的目标是为我的 Java OPC DA 配置 COM/DCOM 安全性客户(不是服务器)。
主要问题是每次客户端尝试从 OPC DA 服务器获取更新时异步模式,它会失败,并在 Windows 事件查看器中出现以下错误:
The server-side authentication level policy does not allow the user
DESKTOP-AAAAA\Admin SID (S-1-5-21-239355189-745547292-2783995333-1001)
from address 192.168.0.5 to activate DCOM server.
请注意,客户端和服务器都在我的笔记本电脑上运行(192.168.0.5 只是我的 Wi-Fi 适配器的 IP 地址)
如果客户端是用 C++ 编写的,我可以调用 Windows API初始化安全。对于 Java,我无法执行此操作,因此我想通过 Windows 注册表中的键对其进行配置HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{AppID_GUID}
,如中所述微软官方文档。
根据上述文档,我需要设置至少 3 个注册表值AuthenticationLevel
、LaunchPermission
和AccessPermission
。后两个是表示访问控制列表 (ACL) 的二进制数据。
现在我有几个问题:
- 我可以在哪里获取
AppID_GUID
java.exe - 解决了(谢谢@Simon Mourier) 如何手动创建
LaunchPermission
和的值AccessPermission
?
有关此问题的更多信息,请参见我的 SO 帖子。
答案1
我认为这里关于 COM 和 APPID 存在一些混淆。
Java.exe
只是一个简单的可执行文件。虽然 COM 服务器可以
实施的在 Java 语言中并由 在运行时执行java.exe
,可执行文件本身没有作为 COM 服务器的内置功能,因此没有 APPID。
此外,OPC DA 客户端也不是 COM 服务器,因此也没有 APPID。