在 UAC 管理下组件创建失败,无需 UAC 提升即可工作
我有一个带有自定义注册过程的.NET COM dll,因此它在HKEY_CURRENT_USER\Software\Classes下注册,与HKEY_LOCAL_MACHINE相反。因此有以下键(当前用户是 Windows 7 PC 上的管理员):
HKEY_CURRENT_USER\Software\Classes\My.ProgId\CLSID
HKEY_CURRENT_USER\Software\Classes\CLSID\{XYZZYZYZYZ-YZYZY-ZYZYZY} etc
如果我构建一个简单的 C++ 客户端:
hr = CLSIDFromProgID(OLESTR("My.ProgId"), &clsid);
并在没有 UAC 提升 (Windows 7) 的情况下运行它,它会成功创建组件。 另一方面,如果我在打开海拔的情况下运行,则会失败并显示 Invalid class string
。
我已经使用进程监视器进行了检查,当它工作时,它会查找 HKCU\Software\Classes\My.ProgID 键并且打开正常。当它失败(提升)时,它会查找 HKCR\My.ProgId 和 NAME NOT FOUND
错误。从 classes_root
手动打开注册表项是成功的:
HKEY key;
RegOpenKey( HKEY_CLASSES_ROOT, _T( "My.ProgId"), &key);
请帮忙!谢谢
I have a .NET COM dll with a custom registration procedure so it gets registered under HKEY_CURRENT_USER\Software\Classes as opposite to HKEY_LOCAL_MACHINE. So there are the following keys (current user is the admin on the Windows 7 PC):
HKEY_CURRENT_USER\Software\Classes\My.ProgId\CLSID
HKEY_CURRENT_USER\Software\Classes\CLSID\{XYZZYZYZYZ-YZYZY-ZYZYZY} etc
If I build a simple C++ client:
hr = CLSIDFromProgID(OLESTR("My.ProgId"), &clsid);
and run it without UAC elevation (Windows 7), it creates the component successfully.
On the other hand, if I run with elevation on, it fails with Invalid class string
.
I've inspected with process monitor, when it works it looks for the HKCU\Software\Classes\My.ProgID key and that opens ok. When it fails (elevation on) it looks for HKCR\My.ProgId and errors with NAME NOT FOUND
. Opening the registry key manually from classes_root
is successful though:
HKEY key;
RegOpenKey( HKEY_CLASSES_ROOT, _T( "My.ProgId"), &key);
Please help! Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论