InvokeHelper()抛出Access被拒绝的异常

时间:2015-07-22 07:36:11

标签: c++ .net windows com dcom

社区,我很有趣,同时也很重。 我有VB .NET应用程序+服务+ C ++应用程序。 C ++应用程序使用InvokeHelper()方法生成一些数据并进行回调:

InvokeHelper(0x60030000, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
     eventType, eventValue);

第一个参数是应该调用的方法的dispid。奇怪的方法,但这不是我的代码,我不能改变这种方式。

在服务中,我有使用dispid属性标记的方法来从C ++应用程序获取此回调。

<DispId(&H60030000)>
Public Sub ServerEvent(ByVal vEventType As Integer, ByVal vEventValue As Object)
    RaiseEvent ControlPanelStateChange(vEventType, vEventValue)
End Sub

如果我以管理员身份登录,此代码可以正常运行。但是,如果Windows用户没有管理员权限,则在调用InvokeHelper()方法后立即发生下一个异常:

  

application.exe中0x75B7C42D(KernelBase.dll)的第一次机会异常:0x80070005:访问被拒绝

你有什么想法吗?我玩过DCOM权限,但结果是一样的。

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:0)

问题的解决方案是:

DCOMCNFG,右键单击“我的电脑”,然后选择属性 - &gt; COM证券标签 - &gt;访问权限 - &gt;单击“编辑默认值”并向其添加“网络服务”并为其授予“允许本地访问权限”。为&lt;做同样的事情Machine_name&gt; \ Users。

然后 - &gt;启动和激活权限,单击编辑默认值并向其添加网络服务,并为其授予本地启动和本地激活权限。为&lt;做同样的事情Machine_name&gt; \ Users。