2012-10-16 2 views
2

J'ai une application Mac OS X qui nécessite un kext (également construit par moi). Je voudrais "regrouper" le kext dans l'application, de sorte que lorsque l'utilisateur exécute l'application, le kext est automatiquement chargé (bien sûr, une invite pour le mot de passe administrateur peut être affichée). Est-ce possible ou dois-je installer le fichier kext au moment de l'installation?Est-il possible de regrouper un kext dans une application?

Répondre

1

Vous pouvez l'installer à partir de votre application. Vous devrez utiliser l'infrastructure de gestion des services pour exécuter une tâche avec des privilèges élevés (écrits en C ou Obj-C). Cela peut ensuite installer le kext.

Votre outil d'aide devrait être un exécutable qui s'exécute à des privilèges élevés pour effectuer l'action d'installer votre kext au nom de votre application.

Étapes:

  1. Inclure le Kext et l'outil d'aide en tant que ressources dans votre paquet d'applications
  2. Créer un outil d'aide pour faire le travail pour vous. Votre outil d'assistance devra copier votre fichier kext dans le répertoire/System/Extensions. Vous devrez le copier avec des privilèges élevés. Obtenez votre outil d'assistance pour appeler kextload pour l'installer.
  3. Vous devrez signer le code de l'outil d'aide et de l'application, et placer les entrées pertinentes pour le cadre de gestion des services dans info.plist pour l'application principale et l'assistant.

La documentation du développeur Apple pour cela est absolument atroce. Bonne chance. Vous devrez probablement faire tout cela en Objective-C ou C, pas Java, car vous devez utiliser des bibliothèques C telles que Security Framework et Service Manager, ainsi que la signature de code.

0

J'ai réussi à l'assembler! J'exécute un script qui demande le mot de passe root puis procède à l'installation du fichier kext. Le seul problème est que l'emplacement du kext groupé doit être connu à l'avance (je dois 'cd' à eux); l'application doit donc être placée dans un emplacement prédéfini, sinon elle ne fonctionnera pas.

+0

Le script peut sûrement trouver où * it * est et donc en déduire l'emplacement du kext via un chemin relatif; alternativement passer l'emplacement du kext au script comme argument? – pmdj

+0

Le kext est «regroupé» dans l'application, qui peut à son tour être placé partout. Si vous connaissez un moyen de déduire le dossier actuel s'il vous plaît faites le moi savoir. – michelemarcon

+0

Depends: Comment lancez-vous le script, et quel type de script est-il? – pmdj

Questions connexes