我有一个使用Activex服务器的应用程序(用VB6编写 - 请不要使用火焰)。
有一个工作站组件和两个activex服务器组件。计算机上的全局DCOM权限设置为“Connect”和“Identify”,服务器组件上的身份验证设置为“None”,并且与DCOM中的activex服务器关联的身份在相关计算机上具有完全管理权限
全局dcom中还有一些条目授予匿名登录本地和远程访问权限,以便客户端exe和activex服务器之间的回调能够正常运行。
为了使这个与客户端一起工作,VB6必须显式调用CoInitialize:
Dim lngHr As Long
Dim lngAuthn As Long
lngAuthn = RPC_C_AUTHN_DEFAULT
blnSecurityCalled = True
lngHr = CoInitializeSecurity(ByVal API_NULL, -1, _
lngAuthn, ByVal API_NULL, _
RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_ANONYMOUS, _
API_NULL, EOAC_NONE, ByVal API_NULL)
If (S_OK <> lngHr) Then
MsgBox "CoInitializeSecurity failed with error code: 0x" _
& Trim$(Str$(Hex(lngHr))), vbCritical, _
"Application Initialization Failure"
Exit Sub
在最新的Windows更新之前,这种方法很有用,它引入了MS记录的问题。 MS建议用RPC_C_AUTHN_LEVEL_CALL替换RPC_C_AUTHN_LEVEL_NONE,但这还不够。
Coinitialize调用没有返回错误代码,因为在这种情况下我应该看到“CoinitializeSecurity Failed”消息。
相反,在必须创建对服务器组件的引用后几步:
ErrSubject = "Calling ClsServer "
Set Server = CreateObject("ASIServer.clsServer")
这句话失败了。它返回“Object Required”消息。如果我通过VB6 IDE(不运行Coinitialize)运行完全相同的代码,则应用程序运行时没有错误。
仅在安装了Windows 10更新时才会出现此问题。如果我卸载它,一切都会再次运行。
只是想知道是否有人对如何继续使用此补丁的应用程序有任何想法,因为谁知道MS何时将正式解决他们在1月3日创建的问题。
答案 0 :(得分:1)
感谢您的所有建议。
我已经确认,当Microsoft使用此修补程序发布更新时,它将解决问题。
他们正在推出它 - 它还没有适用于所有版本的Windows。任何比Windows 8更旧的东西都不会出现这个问题。
答案 1 :(得分:0)
尝试RPC_C_AUTHN_LEVEL_CONNECT
和RPC_C_IMP_LEVEL_IDENTIFY
(而不是RPC_C_IMP_LEVEL_ANONYMOUS
),看看是否有帮助。