那么问题来了。。
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控件
注册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代码
权限设置: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包下下载过来可以直接注册吗
在有些机子上运行不起来,才发现这东西需要注册。
而且不同系统 是否管理员模式注册都非常麻烦
有什么办法吗?cab包下下载过来可以直接注册吗
#7
这东西非管理员 不同平台下应该可以注册控件的吧。
像大型软件都可以。。。具体要用MFC代码来实现,就要开启管理员权限吧?
像大型软件都可以。。。具体要用MFC代码来实现,就要开启管理员权限吧?
#8
感谢你写了这么多。。关键不同系统要怎么处理?非管理员模式下就不能用的吧?
#9
注册的目的,是写路径进注册表,调用的时候就知道去哪里找你的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控件
注册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代码
权限设置: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包下下载过来可以直接注册吗
在有些机子上运行不起来,才发现这东西需要注册。
而且不同系统 是否管理员模式注册都非常麻烦
有什么办法吗?cab包下下载过来可以直接注册吗
#7
这东西非管理员 不同平台下应该可以注册控件的吧。
像大型软件都可以。。。具体要用MFC代码来实现,就要开启管理员权限吧?
像大型软件都可以。。。具体要用MFC代码来实现,就要开启管理员权限吧?
#8
感谢你写了这么多。。关键不同系统要怎么处理?非管理员模式下就不能用的吧?
#9
注册的目的,是写路径进注册表,调用的时候就知道去哪里找你的OCX了。
楼上的都讲了方法。直接调用regsvr32那个exe也可以注册的。
#10
好帖,留名~~~~~~~~~~~~