项目中用C#调用C++的动态库,C++那边会访问计算机的硬件信息,然后反应COM权限不够,问我们C#能不能调用CoInitialize和CoInitializeSecurity函数,想想以前也没用过这个,问了C#同事也无果,百度了后粘了一点代码在程序主入口点里调用CoInitializeSecurity,返回0x80010119,即重复调用,再找了下说CLR会先调用这块的函数,有没有大神能指点下
说是COM库相关其实这块基本没东西,涉及不到COM接口、服务什么的。
打个比方:比如我想获取计算机CPU信息,.NET有封好的方法,我直接调用就可以了;而用C++来做,就需要先调用CoInitialize等函数;现在的情况就是,.NET方面想要获取,C++方面将那块的函数封装成一个DLL给.NET调用,就出现这样的问题了。
现在问题已解决,C++那边说是换了一种方式调用初始化权限的函数,感谢大神们的回复!
这个 COM 是进程内的,还是进程外的?
本人菜鸟一个,以前也没用过COM。。。这块还没有启动别的进程,应该是一个进程里
@ever_Young: 你应该先让他们写个 C++ 的可以正确执行的程序以验证他们的判断上是正确的。或者你使用管理员权限运行你的 C# 程序,测试下能否正确读取硬件信息。
@Launcher: 感谢回复,现在问题已解决
CoInitialize和CoInitializeSecurity是COM初始化程序,由系统调用,不能显式调用(鉴于不可控,所以限制只执行一次,而且,在COM初始化的时候一定会被执行,自然不能再调用了)。
你的问题不是通过调用这两个函数就能解决的,而是要从安全角度出发,否则,WINDOWS系统的安全体系早就崩溃了。
报告权限不够,首先可以对你的应用授权超级管理员,这个一般都不会有问题的。
感谢回复,学习了。