zoukankan      html  css  js  c++  java
  • COM组件和NT服务

    用ATL COM AppWizard编com控件,选择.dll和.exe的区别
    .dll 是进程内组件,不能单独运行,一般编译完成就能被客户端调用。
    .exe 是可以独立运行的组件,要运行后才能被客户端调用。
    前者和客户端使用同一个地址空间,后者是分开的。

    在2000下怎样把程序注册成服务

    // 
    //    FUNCTION:  CmdInstallService() 
    // 
    //    PURPOSE:  Installs  the  service 
    // 
    //    PARAMETERS: 
    //        none 
    // 
    //    RETURN  VALUE: 
    //        none 
    // 
    //    COMMENTS: 
    // 
    void  CmdInstallService() 

         SC_HANDLE      schService; 
         SC_HANDLE      schSCManager; 
     
         TCHAR  szPath[512]; 
     
         if  (  GetModuleFileName(  NULL,  szPath,  512  )  ==  0  ) 
         { 
               _tprintf(TEXT(  "Unable  to  install  %s  -  %s\n  "),  TEXT(SZSERVICEDISPLAYNAME),  GetLastErrorText(szErr,  256)); 
               return; 
         } 
     
         schSCManager  =  OpenSCManager( 
                                                                 NULL,                                      //  machine  (NULL  ==  local) 
                                                                 NULL,                                      //  database  (NULL  ==  default) 
                                                                 SC_MANAGER_CONNECT    ¦  SC_MANAGER_CREATE_SERVICE    //  access  required 
                                                                 ); 
         if  (  schSCManager  ) 
         { 
               schService  =  CreateService( 
                                                                   schSCManager,                              //  SCManager  database 
                                                                   TEXT(SZSERVICENAME),                //  name  of  service 
                                                                   TEXT(SZSERVICEDISPLAYNAME),  //  name  to  display 
                                                                   SERVICE_QUERY_STATUS,                  //  desired  access 
                                                                   SERVICE_WIN32_OWN_PROCESS,    //  service  type 
                                                                   SERVICE_DEMAND_START,              //  start  type 
                                                                   SERVICE_ERROR_NORMAL,              //  error  control  type 
                                                                   szPath,                                          //  service's  binary 
                                                                   NULL,                                              //  no  load  ordering  group 
                                                                   NULL,                                              //  no  tag  identifier 
                                                                   TEXT(SZDEPENDENCIES),              //  dependencies 
                                                                   NULL,                                              //  LocalSystem  account 
                                                                   NULL);                                            //  no  password 
     
               if  (  schService  ) 
               { 
                     _tprintf(TEXT(  "%s  installed.\n  "),  TEXT(SZSERVICEDISPLAYNAME)  ); 
                     CloseServiceHandle(schService); 
               } 
               else 
               { 
                     _tprintf(TEXT(  "CreateService  failed  -  %s\n  "),  GetLastErrorText(szErr,  256)); 
               } 
     
               CloseServiceHandle(schSCManager); 
         } 
         else 
               _tprintf(TEXT(  "OpenSCManager  failed  -  %s\n  "),  GetLastErrorText(szErr,256)); 

     
    void  main() 

    ... 
    if(install_service) 
    CmdInstallService(); 
    ... 
     
    }

    1、在win2000 server机器上用VB(+SP5.0)创建一个ActiveX(DLL)工程,将工程名字改为“COM_Test”
    2、添加一个类模块,名称为“ClsAdd”,并输入如下几行代码:
       Option Explicit
       Public x, y As Integer
       Public Function myAdd() As Integer
         myAdd = x + y
       End Function
    3、打开“工程属性”对话框,选择“生成”,选中“自动升级”;选择“部件”,选中“远程服务器文件”(此点很重要,否则编译时不会生成类型库文件COM_Test.TLB)及“二进制兼容”,最后“确定”
    4、保存并编译,生成“Com_Test.dll”
    5、打开“控制面板/管理/组件服务”,在“COM+应用程序”下利用“COM+应用程序安装向导”创建一个空的COM+应用程序,名称为“MyTest”
    6、在“MyTest”下,新建“组件”,在“组件安装向导”中,选择“安装新组件”(注意:不要使用“导入已被注册的组件”),然后将第4步生成的Com_Test.dll及Com_Test.tlb都添加进来(两个文件都要!),完成。
    7、右击“COM+应用程序”上方的“我的电脑”,选择“属性”,然后在“属性”对话框中的“默认属性”页下,将“默认身份验证级”改为“无”,确定。
    8、右击“MyTest”,导出客户端的“应用代理”。注意:在导出对话框中,必须选择“应用程序代理”而不是“服务器应用程序”!
    9、将导出后的两个文件(即应用程序代理)安装到win98机器上,此时它会在注册表中添加几处注册项,并在C:\program files\ComPlus Applications下产生一个以CLISD命名的文件夹,打开来可看到Com_Test.tlb及Apl82.tmp二个文件。
    注意:win98机器上是没有Com_Test.dll文件的,该文件在win2000 server机器上!

    好了,准备工作至此结束,下面在win98机器上来验证你的COM+配置型组件能否工作。(先用Administrator及口令登录)
    10、启动VB(+sp5.0),创建一个exe工程,在窗体上放置一个文本框与一个命令按钮,并在命令按钮的Click事件中加入代码:

    Dim ox as object
    set ox=createobject("Com_Test.ClsAdd","win2000 server 的IP地址")
    ox.x=12
    ox.y=13
    text1.text=ox.myAdd()

    执行程序,win2000 server 机器的硬盘灯一阵闪烁之后,Text1中欢快地跳出“25”
    ---成功了!

  • 相关阅读:
    Jenkins自动化测试环境搭建
    在windows上运行python程序
    DOS命令笔记
    批处理基础语法
    一键清理c盘垃圾文件--bat文件
    Centos7中打包docker离线包
    python之正则表达式使用
    LoadRunner11使用代理录制脚本
    快速查看日志脚本
    实现两种登录方式一键切换的脚本及相关知识点
  • 原文地址:https://www.cnblogs.com/todd/p/105128.html
Copyright © 2011-2022 走看看