2012-07-28 16 views
6

Ben dokümantasyon ve SMJobBless örneği ve internette çeşitli tartışmalar okuma. Uygulamam şimdi SMJobBless()'u kullanarak ayrıcalıklı bir yardımcı yükler, ancak yardımcı hiç çalışmıyor.SMJobSubmit() SMJobBless tarafından yüklenen ayrıcalıklı bir yardımcı çalıştırmak için kullanılabilir mi?

yardımcı tüm amacı bir Kext Uygulamama önemli bir bileşeni, her uygulama başlar yüklemektir. XPC aracılığıyla yardımcıya bağlanmaya çalışmanın yardımcıyı başlatacağını gösteren örnekler gördüm, ancak yardımcımı basit ve dilsiz tutmak istiyorum.

API doküman bir SMJobSubmit() işlevi olduğunu göstermektedir. Bu tam olarak ne işe yarar? Daha önce SMJobBless() tarafından yüklenen ayrıcalıklı yardımcıyı başlatmak için kullanabilir miyim?

launchd ve Service Management Framework ile ilgili tüm terimlerle karıştırıldım - örneğin, "RunAtLoad" plist seçeneği "iş yüklendiğinde işinizin bir kez başlatılıp başlatılmayacağını denetler". "Yükleme" ve "lansman" tam olarak nedir ve "korusun/yükle" ve "gönder" ile nasıl ilişkilidir?

cevap

9

SMJobBless launchd sistemine işini katacak. Bunu yapmak için SMJobBless örnek koduna bakın.

http://developer.apple.com/library/mac/#samplecode/SMJobBless/Introduction/Intro.html

Ancak launchd tüm amacı işleri (örnek kodda) ve varsayılan olarak başlatılan zaman, iş başlatılması gerektiğini aslında zaman hiçbir belirtim yoktur nasıl kontrol etmektir, Böylece iş asla başlatılmayacak.

Nathan de Vries, SBJobBless'i kullanmak ve XPC kullanarak ayrıcalıklı iş ile iletişim kurmak için çok iyi bir makale ve örnek kod yazdı. Bir ithalat tarafı etkileyen Launchd hizmetiyle iletişim kurmaya çalışıyor eylemi Launchd aslında hizmetini başlatmak neden olacağını, elbette, bu yüzden bu sorunu çözmek olacaktır.

http://atnan.com/blog/2012/02/29/modern-privileged-helper-tools-using-smjobbless-plus-xpc/

Ve özel olarak soruyu cevaplamak için, SMJobSubmit ayrıcalıklı yardımcı yürütebilirsiniz. Anlamak için çok uzun zaman aldı, ancak ikisi arasındaki fark SMJobSubmit'in, launchd kullanarak ayrıcalıklarla bir yürütülebilir dosyayı çalıştırmanıza izin verirken SMJobBless, bir LaunchDaemon'u kalıcı olarak ekleyecektir. SMJobBless'in yüklü yürütülebilir uygulaması kutsanmış olarak kalır, oysa SMJobSubmit her defasında yeniden kimlik doğrulamanızı gerektirir.

Her iki durumda da, yeni bir sürümün kullanıldığından emin olmak için bir önceki SMJob'ı kaldırmanız gerektiğini unutmayın.

  • SMJobRemove, SMJobSubmit her zaman kimlik doğrulaması için her seferinde kullanıcının isteyen, uygulamayı başlatmak:

    Yani, ya gerek düşünürdüm. Yardımcının hemen yürütmesini sağlamak için oluşturduğunuz sözlüğündeki RunAtLoad özelliğini kullanın.

VEYA

  • Kullanım Nathan'ın kodu XPC bağlamak, onun güncellemek değilse, o zaman XPC bağlanmak ve onu sormak, o zaman SMJobRemove, SMJobBless yeni bir sürümünü çıkmak zorunda, onun sürüm numarasını sormak kext'nizi yükleyin. Bu şekilde, kullanıcının sadece yeni bir versiyon için doğrulaması gerekir.
+1

bu konuda Peter'ın blog yazısı SMJobSubmit hakkında örnek kodlar ve daha fazla bilgi içerir: Bu konuda bir şey biliyor gibi gibi http://www.stairways.com/blog/2012-08-06-smjobsubmit –

+0

, could http://stackoverflow.com/questions/11557026/smjobremove-succomes-but-plist-and-helper-tool-not-deleted adresine bir göz atın. – Joe

İlgili konular