Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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 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) 我

正如我所说,它在Windows XP中运行良好,但据我所知,该程序试图注册其COM接口,这在XP中运行良好,但由于UAC,这在Windows Vista和Windows 7中可能会出现问题。尤其是当its作为标准用户运行时(没有提升的权限)

如果我理解正确,这是程序正常运行所必需的,但如果没有提升的权限,它无法执行此代码。如果它将在每次应用程序运行时运行(通常在运行
CWinApp::init()
时运行)

在您说只使用管理员权限之前,用户不会拥有这些权限,无法更改

所以,现在我的问题是:

1) 我的假设正确吗

2) 如果我是对的,那么最好的解决方法是什么?我能把这个拿走吗?我需要设置其他东西吗?(我们将一些VB模块改为使用XML文件,而不是注册表中的内容。)

PS:模块编译成DLL

PPS:UAC必须处于开启状态,请注意:

  • 这些功能的文档未提及任何特权要求;以及
  • 在权限有限的环境中,似乎没有在线用户在这些功能方面遇到问题;以及
  • 现在是2012年,我想如果这些功能在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、 不是函数名。