控件注册,MSFLXGRD.OCX怎样自动注册?

时间:2021-04-18 03:42:10
MSFLXGRD.OCX在有些电脑上是注册了的,有些电脑没有注册

那么问题来了。。
1)对xp系统,管理员账号下:用批处理
copy Msflxgrd.ocx %windir%\system32\
regsvr32 %windir%\system32\Msflxgrd.ocx /s
可以实现注册。
2)xp系统,非管理员账号:用上面批处理就实现不了了吗?怎样实现?

3)对win7系统64位,管理员账号:用
copy Msflxgrd.ocx %windir%\SysWOW64\
regsvr32 %windir%\SysWOW64\Msflxgrd.ocx /s
可以实现注册。用MFC又如何编写?(这个网上有)
4)对win7系统64位,非管理员账号:就实现不了。要开启管理员账号权限才行。用MFC如何实现?

那还有别的win2000,win2003,winvista等64位或32位系统,要怎么注册?对于每个系统都要区分,多少位系统都要判断吗?具体如何实现编写,详细点谢了~

已将全部分压在这问题上啦。希望大神帮下我~

10 个解决方案

#1


注册控件需要管理员权限,VSITA以后的OS,需要ADMIN权限,否则就要提示UAC

#2


LINUX下的C程序里有更改用户权限的命令,WINDOWS下不清楚有没有,估计不会有动态更改用户权限的命令.恐怕只能在WINDOWS下用超级用户账号登录然后再注册

#3


不同平台有所差异 lz还是具体分析吧!
注册OCX控件

BOOL CYourClass::RegistOcx()

{

    HINSTANCE hLib = LoadLibrary("NTGraph.ocx");      //指定要注册的ocx文件的路径及文件名。
 
    if (hLib == NULL)
    {
         MessageBox("不能载入OCX文件!");
         return 0;
    }

    //获取注册函数DllRegisterServer地址
    FARPROC lpDllEntryPoint;
    lpDllEntryPoint = GetProcAddress(hLib,"DllRegisterServer");

    //调用注册函数DllRegisterServer
    if(lpDllEntryPoint!=NULL)
    {
        if(FAILED((*lpDllEntryPoint)()))
        {
            //MessageBox(Handle,"调用DllRegisterServer失败!","失败ing..",MB_OK);
            MessageBox("OCX注册失败!");
            FreeLibrary(hLib);
            return 0;
        };
        //MessageBox(Handle,"注册成功!","Reg",MB_OK);
        MessageBox("OCX注册成功!");
    }
    else
        MessageBox("OCX注册失败!");
        //MessageBox(Handle,"调用DllRegisterServer失败!","失败ing..",MB_OK);

      return 1;

}

 

卸载控件

BOOL CYourClass::UnRegistOcx()

{

    HINSTANCE hLib = LoadLibrary("NTGraph.ocx");          //指定要注册的ocx文件的路径及文件名。
    if (hLib==NULL)
    {
        //MessageBox(Handle,"不能载入Dll文件!","失败ing..",MB_OK);
        MessageBox("不能载入OCX文件!");
        return;
    }

    //获取注册函数DllRegisterServer地址
    FARPROC lpDllEntryPoint;
    lpDllEntryPoint = GetProcAddress(hLib,"DllUnregisterServer");//注意这里是DllUnregisterServer。

 

    //调用注册函数DllRegisterServer
    if(lpDllEntryPoint!=NULL)
    {
        if(((*lpDllEntryPoint)()))
        {
            //MessageBox(Handle,"调用DllUnRegisterServer失败!","失败ing..",MB_OK);
            MessageBox("调用DllUnRegisterServer失败!!!");
            FreeLibrary(hLib);
            return;
        };
        //MessageBox(Handle,"注销成功!","Unreg",MB_OK);
        MessageBox("OCX注销成功!");
    }
    else
    //MessageBox(Handle,"调用DllUnRegisterServer失败!!!","结果",MB_OK);
        MessageBox("OCX调用DllUnRegisterServer失败!!!");

}

判断是否注册  

BOOL CYourClass::IsRegistOcx()

{
    HKEY hKey;     
    BOOL bPresent;     
    TCHAR szPath[_MAX_PATH];     
    DWORD dwRegType;     
    DWORD cbData   =   sizeof   szPath   *   sizeof   TCHAR;    

    if(RegOpenKeyEx(HKEY_CLASSES_ROOT,"ActiveX.ActiveXControl//Clsid",0,KEY_READ,&hKey)!=ERROR_SUCCESS)
        return false;
    else
        return true;
  //ActiveX.ActiveXControl为控件的名称和内部名称   如"NTGRAPH.NTGraphCtrl.1//CLSID"

}

注册命令存放位置

    注册代码应该写在“工程名.cpp”文件中定义的“工程名dlg dlg;”下面,如下

 

       工程名dlg dlg;”

    if(!dlg.IsRegistOcx())

  dlg.RegistOcx();//注册OCX控件

#4


MSFLXGRD.OCX是微软开发的,为什么还要让我们来注册!!!

权限设置:http://soft.zol.com.cn/271/2718681.html
在电脑上操作是:以管理员模式打开dos,输入net user administrator /active:yes
然后register一下,经过测试可以用的。

非管理员模式下如何注册控件,要用MFC代码来写呢?如何将上面转为mfc代码

#5


你是用的cab包自动下载注册的还是自己用脚本去注册的,如果是IE的下载cab注册的话,win764之类,就应该至少用右键以管理员权限打开IE后再使用,这是微软的游戏规则你不用管,让用户这样用就行了

#6


我是自己写了一个小软件 里面用到了MSFLXGRD.OCX

在有些机子上运行不起来,才发现这东西需要注册。

而且不同系统 是否管理员模式注册都非常麻烦

有什么办法吗?cab包下下载过来可以直接注册吗

#7


这东西非管理员 不同平台下应该可以注册控件的吧。
像大型软件都可以。。。具体要用MFC代码来实现,就要开启管理员权限吧?

#8


引用 3 楼 sha_jinhao 的回复:
不同平台有所差异 lz还是具体分析吧!
注册OCX控件

BOOL CYourClass::RegistOcx()

{

    HINSTANCE hLib = LoadLibrary("NTGraph.ocx");      //指定要注册的ocx文件的路径及文件名。
 
    if (hLib == NULL)
    {
        ……

感谢你写了这么多。。关键不同系统要怎么处理?非管理员模式下就不能用的吧?

#9


引用 4 楼 w88ajfeng 的回复:
MSFLXGRD.OCX是微软开发的,为什么还要让我们来注册!!!

权限设置:http://soft.zol.com.cn/271/2718681.html
在电脑上操作是:以管理员模式打开dos,输入net user administrator /active:yes
然后register一下,经过测试可以用的。

非管理员模式下如何注册控件,要用MFC代……


注册的目的,是写路径进注册表,调用的时候就知道去哪里找你的OCX了。
楼上的都讲了方法。直接调用regsvr32那个exe也可以注册的。

#10


好帖,留名~~~~~~~~~~~~

#1


注册控件需要管理员权限,VSITA以后的OS,需要ADMIN权限,否则就要提示UAC

#2


LINUX下的C程序里有更改用户权限的命令,WINDOWS下不清楚有没有,估计不会有动态更改用户权限的命令.恐怕只能在WINDOWS下用超级用户账号登录然后再注册

#3


不同平台有所差异 lz还是具体分析吧!
注册OCX控件

BOOL CYourClass::RegistOcx()

{

    HINSTANCE hLib = LoadLibrary("NTGraph.ocx");      //指定要注册的ocx文件的路径及文件名。
 
    if (hLib == NULL)
    {
         MessageBox("不能载入OCX文件!");
         return 0;
    }

    //获取注册函数DllRegisterServer地址
    FARPROC lpDllEntryPoint;
    lpDllEntryPoint = GetProcAddress(hLib,"DllRegisterServer");

    //调用注册函数DllRegisterServer
    if(lpDllEntryPoint!=NULL)
    {
        if(FAILED((*lpDllEntryPoint)()))
        {
            //MessageBox(Handle,"调用DllRegisterServer失败!","失败ing..",MB_OK);
            MessageBox("OCX注册失败!");
            FreeLibrary(hLib);
            return 0;
        };
        //MessageBox(Handle,"注册成功!","Reg",MB_OK);
        MessageBox("OCX注册成功!");
    }
    else
        MessageBox("OCX注册失败!");
        //MessageBox(Handle,"调用DllRegisterServer失败!","失败ing..",MB_OK);

      return 1;

}

 

卸载控件

BOOL CYourClass::UnRegistOcx()

{

    HINSTANCE hLib = LoadLibrary("NTGraph.ocx");          //指定要注册的ocx文件的路径及文件名。
    if (hLib==NULL)
    {
        //MessageBox(Handle,"不能载入Dll文件!","失败ing..",MB_OK);
        MessageBox("不能载入OCX文件!");
        return;
    }

    //获取注册函数DllRegisterServer地址
    FARPROC lpDllEntryPoint;
    lpDllEntryPoint = GetProcAddress(hLib,"DllUnregisterServer");//注意这里是DllUnregisterServer。

 

    //调用注册函数DllRegisterServer
    if(lpDllEntryPoint!=NULL)
    {
        if(((*lpDllEntryPoint)()))
        {
            //MessageBox(Handle,"调用DllUnRegisterServer失败!","失败ing..",MB_OK);
            MessageBox("调用DllUnRegisterServer失败!!!");
            FreeLibrary(hLib);
            return;
        };
        //MessageBox(Handle,"注销成功!","Unreg",MB_OK);
        MessageBox("OCX注销成功!");
    }
    else
    //MessageBox(Handle,"调用DllUnRegisterServer失败!!!","结果",MB_OK);
        MessageBox("OCX调用DllUnRegisterServer失败!!!");

}

判断是否注册  

BOOL CYourClass::IsRegistOcx()

{
    HKEY hKey;     
    BOOL bPresent;     
    TCHAR szPath[_MAX_PATH];     
    DWORD dwRegType;     
    DWORD cbData   =   sizeof   szPath   *   sizeof   TCHAR;    

    if(RegOpenKeyEx(HKEY_CLASSES_ROOT,"ActiveX.ActiveXControl//Clsid",0,KEY_READ,&hKey)!=ERROR_SUCCESS)
        return false;
    else
        return true;
  //ActiveX.ActiveXControl为控件的名称和内部名称   如"NTGRAPH.NTGraphCtrl.1//CLSID"

}

注册命令存放位置

    注册代码应该写在“工程名.cpp”文件中定义的“工程名dlg dlg;”下面,如下

 

       工程名dlg dlg;”

    if(!dlg.IsRegistOcx())

  dlg.RegistOcx();//注册OCX控件

#4


MSFLXGRD.OCX是微软开发的,为什么还要让我们来注册!!!

权限设置:http://soft.zol.com.cn/271/2718681.html
在电脑上操作是:以管理员模式打开dos,输入net user administrator /active:yes
然后register一下,经过测试可以用的。

非管理员模式下如何注册控件,要用MFC代码来写呢?如何将上面转为mfc代码

#5


你是用的cab包自动下载注册的还是自己用脚本去注册的,如果是IE的下载cab注册的话,win764之类,就应该至少用右键以管理员权限打开IE后再使用,这是微软的游戏规则你不用管,让用户这样用就行了

#6


我是自己写了一个小软件 里面用到了MSFLXGRD.OCX

在有些机子上运行不起来,才发现这东西需要注册。

而且不同系统 是否管理员模式注册都非常麻烦

有什么办法吗?cab包下下载过来可以直接注册吗

#7


这东西非管理员 不同平台下应该可以注册控件的吧。
像大型软件都可以。。。具体要用MFC代码来实现,就要开启管理员权限吧?

#8


引用 3 楼 sha_jinhao 的回复:
不同平台有所差异 lz还是具体分析吧!
注册OCX控件

BOOL CYourClass::RegistOcx()

{

    HINSTANCE hLib = LoadLibrary("NTGraph.ocx");      //指定要注册的ocx文件的路径及文件名。
 
    if (hLib == NULL)
    {
        ……

感谢你写了这么多。。关键不同系统要怎么处理?非管理员模式下就不能用的吧?

#9


引用 4 楼 w88ajfeng 的回复:
MSFLXGRD.OCX是微软开发的,为什么还要让我们来注册!!!

权限设置:http://soft.zol.com.cn/271/2718681.html
在电脑上操作是:以管理员模式打开dos,输入net user administrator /active:yes
然后register一下,经过测试可以用的。

非管理员模式下如何注册控件,要用MFC代……


注册的目的,是写路径进注册表,调用的时候就知道去哪里找你的OCX了。
楼上的都讲了方法。直接调用regsvr32那个exe也可以注册的。

#10


好帖,留名~~~~~~~~~~~~