windows 7中的COleTemplateServer::Registeral()会发生什么 < >好,我们有一个C++应用程序在Windows XP中运行良好。 它在初始化中有以下代码 // Register all OLE server (factories) as running. This enables the // OLE libraries to create objects from other applications. COleObjectFactory::RegisterAll();
正如我所说,它在Windows XP中运行良好,但据我所知,该程序试图注册其COM接口,这在XP中运行良好,但由于UAC,这在Windows Vista和Windows 7中可能会出现问题。尤其是当its作为标准用户运行时(没有提升的权限) 如果我理解正确,这是程序正常运行所必需的,但如果没有提升的权限,它无法执行此代码。如果它将在每次应用程序运行时运行(通常在运行windows 7中的COleTemplateServer::Registeral()会发生什么 < >好,我们有一个C++应用程序在Windows XP中运行良好。 它在初始化中有以下代码 // Register all OLE server (factories) as running. This enables the // OLE libraries to create objects from other applications. COleObjectFactory::RegisterAll();,c++,windows-7,registry,uac,elevated-privileges,C++,Windows 7,Registry,Uac,Elevated Privileges,正如我所说,它在Windows XP中运行良好,但据我所知,该程序试图注册其COM接口,这在XP中运行良好,但由于UAC,这在Windows Vista和Windows 7中可能会出现问题。尤其是当its作为标准用户运行时(没有提升的权限) 如果我理解正确,这是程序正常运行所必需的,但如果没有提升的权限,它无法执行此代码。如果它将在每次应用程序运行时运行(通常在运行CWinApp::init()时运行) 在您说只使用管理员权限之前,用户不会拥有这些权限,无法更改 所以,现在我的问题是: 1) 我
CWinApp::init()
时运行)
在您说只使用管理员权限之前,用户不会拥有这些权限,无法更改
所以,现在我的问题是:
1) 我的假设正确吗
2) 如果我是对的,那么最好的解决方法是什么?我能把这个拿走吗?我需要设置其他东西吗?(我们将一些VB模块改为使用XML文件,而不是注册表中的内容。)
PS:模块编译成DLL
PPS:UAC必须处于开启状态,请注意:
COleObjectFactory::RegisterAll()
和COleObjectFactory::UpdateRegisterYall()
的实现
RegisterAll
最终调用registeral
的结果是在olefact.cpp:135
中调用CoRegisterClassObject
:
向OLE注册EXE类对象,以便其他应用程序可以连接到该对象
我相信此注册仅限于当前用户的会话和应用程序的生命周期。备注部分涉及特权(从Windows Server 2003开始…),但没有提供任何具体内容
有一个称为运行对象表(ROT)的对象,可以通过检索。文档中有以下代码段:
每个工作站都有一个本地ROT,用于维护已注册为在该计算机上运行的对象表
有一些关于权限和权限的更多信息(它表明各种权限级别的进程都可以使用它)。左侧的链接也可能有帮助
总的来说,似乎没有任何迹象表明CoRegisterClassObject
需要管理员权限
UpdateRegistryAll
此函数在olefact.cpp:375
中结束,并在此处打开HKEY\U CLASSES\U ROOT
。此时情况有所好转:
注册表函数,如RegOpenKeyEx
或regqueryvaluex
允许您指定HKEY_CLASSES\u ROOT
键。当您从交互式用户帐户中运行的进程调用这些函数时,系统会将HKEY_LOCAL\u MACHINE\Software\CLASSES
中的默认设置与交互式用户帐户合并er在HKEY\U CURRENT\U USER\Software\Classes中的设置
进一步说明:
如果将密钥写入HKEY\U CLASSES\U ROOT
下的密钥,系统将信息存储在HKEY\U LOCAL\U MACHINE\Software\CLASSES
文档没有定义当您试图以有限的权限(即标准用户不能向HKLM
写入)写入HKEY_CLASSES\u ROOT
时会发生什么,但我相信您最终会向HKCU
写入
最后,请注意:
Windows Server 2003和Windows XP/2000:应用程序可以向每台计算机或每用户COM配置存储注册从属COM对象(HKEY\U LOCAL\U machine\Software\Classes
或HKEY\U CURRENT\U user\Software\Classes
)
因此,如果它通过了香港大学,你应该会没事的
警告实现者:不要依赖实现细节。为什么不在windows 7下尝试一下?谁说它需要管理员权限?如果它在不接触注册表的情况下将自己注册为类工厂,那么它不应该需要管理员。如果它将自己注册到HKCU,那么它不应该需要管理员。我不知道“我不知道具体细节,但听起来好像它调用了一个没有提到特权要求的程序。@RedX-我现在正在尝试设置一台W7计算机。但是我只能做W7 32位,但是在32位和64位之间有一些虚拟化的东西可能会出问题?应用程序可以很好地写入HKCU,不需要升级。我没有评论s、 不是函数名。