Aggiornamento: Per aggiornare persone che ancora usano questa risposta per riferimento, BLAuthentication
fa uso di un vecchio, e molto unrecommended funzione chiamata AuthorizationExecuteWithPriviledges
che, durante il lavoro, va contro la moderno paradigma di sicurezza, ed è deprecato (ed è stato per un po '). Sei ancora autorizzato a utilizzarlo, tecnicamente, ma se stai sviluppando per Mac OS X Lion, sei più che benvenuto nell'utilizzare il framework ServicesManagement, che ti consente di eseguire codice con privilegi come strumento di supporto.
Per informazioni su come creare e avviare uno strumento di supporto privilegiato, dare un'occhiata a una delle mie domande, Writing a Privileged Helper Tool with SMJobBless().
Non c'è un modo semplice per autorizzare vera NSFileManager
, così si dovrebbe considerare di usare lo standard mv
e cp
strumenti eseguiti con l'autenticazione amministratore con la classe BLAuthentication
. Sfortunatamente, il sito web dell'autore originale è inattivo, ma puoi trovare facilmente copie della classe che gira su Google (posso anche caricarne una copia se lo desideri).
Con BLAuthentication
, ciò che si sta cercando di fare più o meno così:
#define MOVE @"/bin/mv"
if (![[BLAuthentication sharedInstance] isAuthenticated:MOVE]) {
[[BLAuthentication sharedInstance] authenticate:MOVE];
}
NSArray *arguments = [NSArray arrayWithObjects:@"location1", @"location2", nil];
[[BLAuthentication sharedInstance] executeCommand:MOVE withArgs:arguments];
Il codice qui sopra richiederà all'utente la password dell'amministratore e autenticare il programma per il limite di tempo predefinito di cinque minuti.
ATTENZIONE
naturalmente, essere sempre attenti con i file di sistema! Evita di spostarli o manipolarli quando possibile, specialmente se il tuo programma verrà eseguito sul computer di qualcun altro (se qualcosa va storto, verrai accusato)!
fonte
2011-01-04 23:37:58
Apprezzo molto il post! Quindi sarei ancora in grado di utilizzare la classe NSFileManager o dovrei usare il comando "mv" da ora in poi? A proposito, sarebbe bello se tu potessi caricarlo per me! Grazie!!!! – lab12
Ok, sono stato in grado di trovare la classe BLAuthentication e ho notato che era del 2001. Funzionerebbe ancora se ha 10 anni? Inoltre, puoi fornire qualsiasi informazione su come implementare la parte NSTask? – lab12
Kevin, per chiarire alcune cose: a) Per i file normali, puoi comunque usare 'NSFileManager', ma per l'accesso root, usa' BLAuthentication' come mostrato sopra. b) Scusa, errore mio; non hai nemmeno bisogno di 'NSTask' (ho dimenticato di aggiornare quella parte della mia risposta insieme al codice, ma ora è stato risolto). Basta usare '-executeCommand: withArgs:' con il percorso del comando (@ "/ bin/cp" o @ "/ bin/mv") per eseguire l'operazione di spostamento/copia.c) Sì, anche se 'BLAuthentication' è * vecchio *, è ancora compilato e funziona perfettamente bene, anche al di sotto di 10.6 (le strutture di sicurezza sono appena cambiate nel tempo). –