转自:http://blog.csdn.net/idiszerg/article/details/3875934

使用ATL向导的话,会在resource中产生一个rgs的注册脚本文件放在"REGISTRY"目录中用来注册组件,会在程序中通过函数DECLARE_REGISTRY_RESOURCEID(IDR_OPCSERVER)使用,IDR_OPCSERVER就是向导产生的资源文件的ID,当服务器调用CComModule::RegisterServer()时,便会使用这些脚本来载入注册表的设置,并在调用CComModule::UnregisterServer()时移除它们。所有COM的注册键都放在HKEY_CLASSES_ROOT中。

例子如下

HKCR
{
  FactorySoft.myShell.1 = s 'FactorySoft myShell'
  {
    CLSID = s '{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}'
  }
  FactorySoft.myShell = s 'FactorySoft myShell'
  {
    CLSID = s '{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}'
        OPC
        {
            Vendor = s 'FactorySoft, Inc'
        }
  }
  NoRemove CLSID
  {
    ForceRemove {C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F} = s 'FactorySoft myShell'
    {
      ProgID = s 'FactorySoft.myShell.1'
      VersionIndependentProgID = s 'FactorySoft.myShell'
      LocalServer32 = s '%MODULE%'
      {
        val ThreadingModel = s 'both'
      }
    }
  }
  NoRemove AppID
  {
    ForceRemove {C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F} = s 'FactorySoft myShell'
  }
}

HKCR 表示注册表中COM对象的注册项是HKEY_CLASS_ROOT 的缩写

NoRemove表示在反注册过程中不要删除这层注册表项;ForceRemove表示要要完全删除后面的项然后重新创建。MSDN原文如下

String Literal Description
ForceRemove Completely remove the following key (if it exists) and then recreate it.
NoRemove Do not remove the following key during Unregister.
val The following <Key Name> is actually a named value.
Delete Delete the following key during Register.
s The following value is a string.
d The following value is a DWORD.

注册后的注册表主要修改如下

1、HKEY_CLASSES_ROOT/AppID/

[HKEY_CLASSES_ROOT/AppID/{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}]
@="FactorySoft myShell"

2、HKEY_CLASSES_ROOT/CLSID/

[HKEY_CLASSES_ROOT/CLSID/{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}]
@="FactorySoft myShell"

[HKEY_CLASSES_ROOT/CLSID/{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}/Implemented Categories]

[HKEY_CLASSES_ROOT/CLSID/{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}/Implemented Categories/{63D5F430-CFE4-11D1-B2C8-0060083BA1FB}]

[HKEY_CLASSES_ROOT/CLSID/{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}/Implemented Categories/{63D5F432-CFE4-11D1-B2C8-0060083BA1FB}]

[HKEY_CLASSES_ROOT/CLSID/{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}/LocalServer32]
@="D://temp//test//Debug//myShell.exe"
"ThreadingModel"="both"

[HKEY_CLASSES_ROOT/CLSID/{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}/ProgID]
@="FactorySoft.myShell.1"

[HKEY_CLASSES_ROOT/CLSID/{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}/VersionIndependentProgID]
@="FactorySoft.myShell"

3、HKEY_CLASSES_ROOT/FactorySoft.myShell

[HKEY_CLASSES_ROOT/FactorySoft.myShell]
@="FactorySoft myShell"

[HKEY_CLASSES_ROOT/FactorySoft.myShell/CLSID]
@="{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}"

[HKEY_CLASSES_ROOT/FactorySoft.myShell/OPC]

[HKEY_CLASSES_ROOT/FactorySoft.myShell/OPC/Vendor]
@="FactorySoft, Inc"

[HKEY_CLASSES_ROOT/FactorySoft.myShell.1]
@="FactorySoft myShell"

[HKEY_CLASSES_ROOT/FactorySoft.myShell.1/CLSID]
@="{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}"

4、HKEY_LOCAL_MACHINE/SOFTWARE/Classes/AppID

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/AppID/{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}]
@="FactorySoft myShell"

5、HKEY_LOCAL_MACHINE/SOFTWARE/Classes/CLSID

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/CLSID/{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}]
@="FactorySoft myShell"

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/CLSID/{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}/Implemented Categories]

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/CLSID/{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}/Implemented Categories/{63D5F430-CFE4-11D1-B2C8-0060083BA1FB}]

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/CLSID/{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}/Implemented Categories/{63D5F432-CFE4-11D1-B2C8-0060083BA1FB}]

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/CLSID/{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}/LocalServer32]
@="D://temp//test//Debug//myShell.exe"
"ThreadingModel"="both"

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/CLSID/{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}/ProgID]
@="FactorySoft.myShell.1"

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/CLSID/{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}/VersionIndependentProgID]
@="FactorySoft.myShell"

6、HKEY_LOCAL_MACHINE/SOFTWARE/Classes/

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/FactorySoft.myShell]
@="FactorySoft myShell"

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/FactorySoft.myShell/CLSID]
@="{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}"

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/FactorySoft.myShell/OPC]

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/FactorySoft.myShell/OPC/Vendor]
@="FactorySoft, Inc"

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/FactorySoft.myShell.1]
@="FactorySoft myShell"

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/FactorySoft.myShell.1/CLSID]
@="{C9B70C6C-2BEE-4589-96B3-01E2F4D21C9F}"

从中可以看出s '%MODULE%'被替换成了@="D://temp//test//Debug//myShell.exe"程序的路径

关于ATL的rgs注册文件的更多相关文章

  1. WinRAR 4.20 beta2 key!注册文件 注册码

    WinRAR 4.20 beta2 key!注册文件 注册码 WinRAR 4.20 beta2注册文件 WinRAR 4.20 beta2 working key ================= ...

  2. (C#)Windows Shell 外壳编程系列7 - ContextMenu 注册文件右键菜单

    原文 (C#)Windows Shell 外壳编程系列7 - ContextMenu 注册文件右键菜单 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windo ...

  3. Delphi 注册文件类型 设置文件图标

        {------------------------------------------------------------------------------- @过程名: slpert -& ...

  4. ATL项目编译注册dll的时候报权限错误:error MSB8011: Failed to register output. Please try enabling Per-user Redirection or register the component from a command prompt with elevated permissions.

    atl工程在vs2013编译的时候会在编译成功之后去使用 regsvr32 去注册 生成的 .dll 偶尔在编译的时候会遇到下面的错误: error MSB8011: Failed to regist ...

  5. WinRAR4.20注册文件key文件注册码

    1.首先安装rar4.2官方版 2.在WinRAR已安装文件夹内新建文本文档,打开文档,把下面代码复制进去 RAR registration datawncnUnlimited Company Lic ...

  6. linux设备驱动程序--在用户空间注册文件接口

    linux字符设备驱动程序--创建设备节点 基于4.14内核,运行在beagleBone green 在上一讲中,我们写了第一个linux设备驱动程序--hello_world,在驱动程序中,我们什么 ...

  7. ATL com的dll文件与tlb文件

    一..tlb文件: 只有COM组件才有tlb文件,普通dll文件没有. 包含内容: 1.它包含了COM类和接口的GUID值,接口的函数声明信息,并不是接口的实现文件.相当于类和接口的头文件. tlb文 ...

  8. BCompare注册文件+密钥被撤销解决方案

    注册码: rssAPVg2OpBjDVo3E0DhGWrjPIq0hsTSuNz13wTuzVHfb2mRgO9bZKn9Bl42D5YEyMSYPXsxzcb08dqbRlbzWNJzJXE6YVa ...

  9. 关于ATL生成COM注册失败解决方法

    最近搞C++封装研究了下COM 做最后整理打包的时候发现各种问题引发的注册失败,so整理下备忘. 1.因引用其它动态连接库与你注册的dll不在同一目录下引起的异常.(解决方法将依赖dll放置与注册dl ...

随机推荐

  1. SQL Server 中WITH (NOLOCK)

    with(nolock)的功能: 1: 指定允许脏读.不发布共享锁来阻止其他事务修改当前事务读取的数据,其他事务设置的排他锁不会阻碍当前事务读取锁定数据.允许脏读可能产生较多的并发操作,但其代价是读取 ...

  2. Javascript基础学习(1)_类型、值和变量

    1.null和undefined ①概念上区别: null是一个特殊的对象,是“非对象”,使用typeof后是object对象 undefined用未定义的值表示更深层次的“空值”,它是变量的一种取值 ...

  3. OC - 17.AFNetworking原理及常用操作

    AFN的六大模块 NSURLConnection,主要对NSURLConnection进行了进一步的封装,包含以下核心的类: AFURLConnectionOperation AFHTTPReques ...

  4. 线性回顾-generalize issue

    Ein的平均,Eout的平均 用这个平均来justify linear regresssion能够用的很好 noise level 资料里有多少的杂讯 等一下要证明的事情 predictions + ...

  5. ThinkPHP调试模式与日志记录

    1.可以在config.php中进行设置,默认为关闭状态. 'APP_DEBUG'   =>  true 打开\ThinkPHP\Common\debug.php文件可以查看debug的默认设置 ...

  6. ubuntu下mysql安装与测试

    原文地址: http://www.cnblogs.com/zhuyp1015/p/3561470.html 注意:原文地址中,最后g++ 编译源代码时少了个字母.添上即可. ubuntu上安装mysq ...

  7. 实用lsof常用命令行

    1, 使用 lsof 命令行列出所有打开的文件 # lsof 这可是一个很长的列表,包括打开的文件和网络 上述屏幕截图中包含很多列,例如 PID.user.FD 和 TYPE 等等. FD - Fil ...

  8. 利用java实现一个简单的远程监控程序

    一般的远程监控软件都是用c或者c++等语言开发的,而使用java如何来实现相同的功能呢. 首先我们先介绍一下一个简单的远程监控程序的实现原理. 功能一,远程屏幕监视 (1) 必须要有监控端与被监控端, ...

  9. virtalBox共享文件夹设置

    sudo mount -t vboxsf gongxiang /mnt/shared/

  10. ServiceStack.RabbitMQ在站点中使用时导致静态页面无法正常解析

    当站点中集成ServiceStack.RabbitMQ时快速处理异步请求时,官方建议初始化如下: public class AppHost : AppHostHttpListenerBase { pu ...