Vista上面的UAC功能,给很多COM组件的运行带了障碍,有时,必须把COM提升到Administrator权限下运行。
1, 修改COM组件的注册表:
实现COM权限提升,关键是给注册表中增加几个键值:
HKEY_LOCALMAchine/Software/CLSID/{your COM clsid} 下
增加LocoalizedString,指定UAC控制中需要显示的字符文本。
增加Elevation/Enabled = 1;
同时给COM指定一个AppID。
在HKEY_LocalMachine/Software/AppID/{your appID} 下,
增加 DllSurrogagte, value = "".
这个值很重要,它表示COM单独运行在系统默认的surrogate进程中,这样才能实现权限的提升。
2:处理COM组件的Marshal
完成上面的注册表修改后,再检查一下你的COM是如何处理marshal问题的,不外乎两种方式,单独的Proxy/stub dll,或者type lib。
对于大多数使用VS建立的project,一般都是采用的type lib方式,不需要手工修改的。对于proxy/stub dll 方式,则需要重新编译一下proxy/stub dll, 并且register it.
3,修改客户端代码,利用CoCreateInstanceAsAdmin() 调用COM。具体的用法可以查MSDN。
现在,万事大吉,运行一下,COM应该能正常的提升到Administrer权限运行了。