2013-02-07 29 views
3

條件如下:用objective-c編寫的MacOSX 10.7和Cocoa圖形應用程序。MACOSX:如何啓動需要來自可可應用程序的root權限的守護進程

我遇到以下問題。 我無法從Cocoa應用程序的/ user/bin文件夾啓動守護程序應用程序。 我知道我應該擁有root權限才能做到這一點。

我有安裝程序,而不是* .pkg,但是手動編寫安裝程序應用程序。安裝過程完成後,我需要啓動我的守護進程。 如何在objective-c應用程序中增加我的權限級別?

我有這段代碼。 但不推薦使用AuthorizationExecuteWithPrivileges調用。

我們不應該使用它。

AuthorizationItem authItem  = { kSMRightModifySystemDaemons, 0, NULL, 0 }; 
AuthorizationRights authRights = { 1, &authItem }; 
AuthorizationFlags flags  = kAuthorizationFlagDefaults | 
            kAuthorizationFlagInteractionAllowed | 
            kAuthorizationFlagPreAuthorize | 
            kAuthorizationFlagExtendRights; 

AuthorizationRef authRef = NULL; 

OSStatus status = AuthorizationCreate(&authRights, 
kAuthorizationEmptyEnvironment, flags, &authRef); 

status = AuthorizationExecuteWithPrivileges(authorizationRef, tool, kAuthorizationFlagDefaults, args, &pipe); 

第二種方法是使用特權助手。 這種方式對我來說看起來非常複雜。 我只需要在安裝後啓動守護進程。

cource的我可以讓用戶重新啓動mac。但我想避免它。

其他可能性是守護程序可執行文件上的SUID位。 但我認爲這並不安全。

我的問題是: 有沒有其他更簡單的方法來做到這一點?

+0

你在安裝時詢問管理員密碼? –

+1

我可以要求輸入密碼。但已棄用AuthorizationCreate和AuthorizationExecuteWithPrivileges。我正在使用SDK 10.8,並且有關於它的彙編警告。 – Vlad

+0

你讀過這個嗎? http://stackoverflow.com/questions/6841937/authorizationexecutewithprivileges-is-deprecated提供一個hacky-tacky解決方案:) – favoretti

回答

2

那麼,這裏可能有答案。

您需要:

  1. 公司運作創建一個shell腳本。
  2. 創建一個蘋果腳本NSString,其中您請求執行shell腳本with administrator privilege
  3. 創建一個NSAppleScript的實例並執行蘋果腳本。

以下是詳細信息:

AuthorizationExecuteWithPrivileges is deprecated

+0

謝謝!是的,NSAppleScript方法沒有特權幫手。但是,每次運行此腳本時都需要輸入用戶密碼。其實我是用特權幫手來做的。 – Vlad

+0

那麼,這是要麼是特權幫手......你不能擁有一切......對不起。伊莎貝爾 – 2013-03-22 10:33:15

相關問題