2011-04-14 82 views
0

我目前正在处理与COM对象交互的项目。在我的代码我呼吁以下内容:用户权限和COM对象

 

CoInitialize(NULL); //Initialize COM system 
HRESULT hr = spSSCProt.CreateInstance(("SSCProt.SSCprotector")); 
 

这应该得到我需要的对象。如果失败,这大概是因为COM服务器没有使用regsvr32注册的COM对象。一切都很好,我有以下代码来处理:

 

/if its not, lets try to register it ourselves...create the command 
CHAR cmdBuf[BUFSIZE]; 
GetCurrentDirectory(BUFSIZE,cmdBuf); 
string cmd("regsvr32 -s \""); 
cmd += cmdBuf; 
cmd += "\\stixDlls\\SSCProt.dll\""; 

//attempt to register it 
system(cmd.c_str()); 
 

如果用户不是管理员,则会出现此问题。他们将无法执行COM服务器的注册代码部分。我的大多数用户可能不会是管理员。

任何想法如何我可以注册com服务器,如果他们不是管理员。

感谢

回答

0

如果可能的话,做的COM注册的最佳位置是在安装过程中,它通常被在管理员权限运行。如果这是不可能的,还有另一种标准方式:Vista和Win7上的大多数家庭用户都具有管理员权限 - 默认情况下它没有启用。要启用这些权限,您应该通过着名的UAC请求提升。

1

Windows保护的重点在于防止您这样做。 Windows应该如何知道你不是试图安装某些恶意软件的病毒?

您唯一的希望就是启动另一个程序,通过它的清单请求管理员权限。此时Windows将要求输入管理员密码。