2011-04-14 55 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將要求輸入管理員密碼。