ATL ActiveX 非管理员权限发布(支持vs2005)
在win7系统中,vs2005开发的atl activex需要管理员权限才能注册。
解决方法:
PerUserRegistration.h
#pragma once class PerUserRegistration
{
public:
PerUserRegistration(bool perUser = true);
~PerUserRegistration(); private:
#if _ATL_VER < 0x0900
static void EnablePerUserTLibRegistration();
bool m_mapping;
#endif
};
#include "PerUserRegistration.h"
#include <Windows.h>
#include <assert.h> PerUserRegistration::PerUserRegistration(bool perUser)
#if _ATL_VER < 0x0900
: m_mapping(false)
#endif
{
#if _ATL_VER < 0x0900
// this seems to be always active and therefore may break
// any COM functionality thats not registered per user if (!perUser)
{
return;
} HKEY key; LONG err = ::RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Classes"), , MAXIMUM_ALLOWED, &key);
if(err == ERROR_SUCCESS) {
err = ::RegOverridePredefKey(HKEY_CLASSES_ROOT, key);
::RegCloseKey(key);
} if (err == ERROR_SUCCESS) {
EnablePerUserTLibRegistration();
m_mapping = true;
}
#else // _ATL_VER >= 0900
AtlSetPerUserRegistration(perUser);
#endif
} #if _ATL_VER < 0x0900
void PerUserRegistration::EnablePerUserTLibRegistration()
{
HMODULE hOleaut32 = ::GetModuleHandle(TEXT("Oleaut32.dll"));
assert(hOleaut32); typedef void (WINAPI * EnablePerUserTLibRegistrationProcPtr) (void);
EnablePerUserTLibRegistrationProcPtr enablePerUserTLibRegistrationProcPtr =
reinterpret_cast<EnablePerUserTLibRegistrationProcPtr>(
GetProcAddress(hOleaut32, "OaEnablePerUserTLibRegistration"));
if (enablePerUserTLibRegistrationProcPtr) {
enablePerUserTLibRegistrationProcPtr();
}
}
#endif PerUserRegistration::~PerUserRegistration()
{
#if _ATL_VER < 0x0900
if (m_mapping)
::RegOverridePredefKey(HKEY_CLASSES_ROOT, NULL);
#endif
}
然后在ActiveX程序中使用:
// DllRegisterServer - 将项添加到系统注册表
STDAPI DllRegisterServer(void)
{
PerUserRegistration perUser(true); // 注册对象、类型库和类型库中的所有接口
HRESULT hr = _AtlModule.DllRegisterServer();
#ifdef _MERGE_PROXYSTUB
if (FAILED(hr))
return hr;
hr = PrxDllRegisterServer();
#endif
return hr;
} // DllUnregisterServer - 将项从系统注册表中移除
STDAPI DllUnregisterServer(void)
{
PerUserRegistration perUser(true); HRESULT hr = _AtlModule.DllUnregisterServer();
#ifdef _MERGE_PROXYSTUB
if (FAILED(hr))
return hr;
hr = PrxDllRegisterServer();
if (FAILED(hr))
return hr;
hr = PrxDllUnregisterServer();
#endif
return hr;
}
这样就可以了,不是管理员也可以正常注册使用了。
ATL ActiveX 非管理员权限发布(支持vs2005)的更多相关文章
- windows7安装phpnow Apache非管理员权限不能操作Windows NT服务的解决方法
科普一下:PHPnow 是什么? Win32 下绿色免费的 Apache + PHP + MySQL 环境套件包.简易安装.快速搭建支持虚拟主机的 PHP 环境,可以安装 Discuz! ...
- 用非管理员权限启动主程序,并用管理员权限启动子程序,导致WM_COPYDATA消息发送失败的问题
问题描述 : 用非管理员权限启动dzh,dzh再启动dtssm,由于dtssm的配置文件app.manifest 中设置了requireAdministrator,导致dtssm总是以管理员权 ...
- windows下非管理员权限安装mysql
windows下,mysql有两种安装方式: 1.msi安装 2.zip安装 无论是哪种安装方式,都因为需要将mysql安装为一个服务,所以必须要以管理员权限安装. 因为公司的换了虚拟机,无法取得管理 ...
- Vista UAC下应用程序标注为“需要管理员权限”的四种方法
在Microsoft 的UACBlog里对此有过叙述.总结如下: 首先,如果一个程序被识别为管理员程序时,Vista会在它的图标上加上一个盾牌标记.因此很容易看出来. 其次,如果UAC有效的话,管理员 ...
- C#以管理员权限运行源码,C#软件获取管理员权限,c#获取管理员权限
C#以管理员权限运行源码,C#软件获取管理员权限,c#获取管理员权限 发布时间:2014-10-19 21:40内容来源:未知 点击: 次 windows 7和vista提高的系统的安全性,同时需要明 ...
- Win7,Vista UAC下应用程序标注为“需要管理员权限”的四种方法(可以修改注册表)
[转]Vista UAC下应用程序标注为“需要管理员权限”的四种方法 在Microsoft 的UACBlog里对此有过叙述.总结如下: 首先,如果一个程序被识别为管理员程序时,Vista会在它的图标上 ...
- c# 如何获取系统管理员权限(UAC) 及判断当前是否是管理员权限
环境说明: VS2012,windows 7 亲自验证过win7 和xp ,XP直接不弹框,因为XP没有UAC控制机制 步骤1: 右键项目-->属性-->安全性-->选中[启用Cl ...
- vs2005 ,2008,2010中引入app.manifest(即c#程序在win7下以管理员权限运行方法)
打开VS2005.VS2008.VS2010工程,查看工程文件夹中的Properties文件夹下是否有app.manifest这个文件:如没有,按如下方式创建:鼠标右击工程在菜单中选择“属性”,点击工 ...
- wordpress非管理员看不到数据需有manage_options权限
今天ytkah在调试一个新功能的时候发现wordpress非管理员看不到一些插件的数据,比如editor,添加一些用户权限还是不行,不得已直接把administrator所有的权限都添加测试一遍,最后 ...
随机推荐
- 贪心算法:旅行商问题(TSP)
TSP问题(Traveling Salesman Problem,旅行商问题),由威廉哈密顿爵士和英国数学家克克曼T.P.Kirkman于19世纪初提出.问题描述如下: 有若干个城市,任何两个城市之间 ...
- 如何查看MySQL中每张表占用的空间大小
如题,找到MySQL中的information_schema表,这张表记录了所有数据库中表的信息,主要字段含义如下: TABLE_SCHEMA : 数据库名 TABLE_NAME:表名 ENGINE: ...
- ionic移动开发入门
学习资料:http://www.ionic.wang http://www.ionicframework.com/
- iphone 与 ipad -- UIPopoverPresentationViewController
iOS8.0之后, 苹果推出了UIPopoverPresentationViewController, 在弹出控制器时, 统一采用 presentViewController, 但是要实现iPhone ...
- iOS - 应用程序国际化
开发的移动应用更希望获取更多用户,走向世界,这就需要应用国际化,国际化其实就是多语言.这篇文章介绍Xcode4.5以后的国际化,包括应用名国际化和应用内容国际化.如果是Xcode4.5之前版本请参考. ...
- 基于opencv的小波变换
基于opencv的小波变换 提供函数DWT()和IDWT(),前者完成任意层次的小波变换,后者完成任意层次的小波逆变换.输入图像要求必须是单通道浮点图像,对图像大小也有要求(1层变换:w,h必须是2的 ...
- 【JavaScript】JavaScript函数的参数
要访问js函数中传入的所有参数,可以使用特殊的arguments变量.但是虽然可以像访问数组一样从arguments变量中读取参数,但arguments并非真正的数组.例如,arguments没有pu ...
- Android 连接tomcat模拟登陆账号
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...
- 如何取消Linux下,vi中显示的^M符号
http://www.cnblogs.com/dkblog/archive/2012/02/03/2337187.html dos2unix file_name bash: ./configure: ...
- [转贴]JAVA 百度地图SDK地图学习——实现定位功能
之前已经完成了百度地图SDK和百度定位SDK的配置. http://my.oschina.net/u/1051634/blog/180880 实现百度定位的功能,最好仔细看看官方的文档,看了好几次才有 ...