• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Script vor dem Start einer App aufrufen

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Nein nein! Meine Idee/Vorschlag sollte nur einen möglichen "sicheren" Weg aufzeigen. :cool:
Wobei.... ich hatte ja angemerkt, dass das seit Lion eh gar nicht mehr so einfach umzusetzen ist.

Wenn nichts dagegen spricht, dass iTunes kurz startet, so ist der eingangs beschriebene Applauncher eine Möglichkeit.
Einfach zu basteln wäre statt dessen auch ein LaunchDaemon/Agent, der den Prozess iTunes überwacht und ggf. gleich wieder beendet. Das wäre der Weg, den ich wohl nehmen würde.

Rechte verbiegen: Mit verdehten Rechten startet iTunes halt nicht. Soweit so gut. Aber dazu der ganze Mumpitz mit Dummy App, ausgetauschten Binaries, o.ä.... hmm o_O


Gruß
 

naich

Pomme d'or
Registriert
22.11.08
Beiträge
3.082
Einfach zu basteln wäre statt dessen auch ein LaunchDaemon/Agent, der den Prozess iTunes überwacht und ggf. gleich wieder beendet. Das wäre der Weg, den ich wohl nehmen würde.
Ich denke das ist einer der wenigen sicheren Varianten: Wenn der Daemon unter root immer läuft, kann er die Rechte der Applikation entsprechend so setzen, dass nur root sie verändern kann, und dann entsprechend das Executable Bit setzen oder löschen.

Wenn der reguläre User nun keine Verwaltungsrechte besitzt, kann er weder den Daemon beenden, noch die Rechte manuell setzen...
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Dann läd sich der Nutzer iTunes einfach neu runter und packt es woanders hin...
 

Loooki

Beauty of Kent
Registriert
15.09.09
Beiträge
2.169
Anscheind hat das Thema doch mehr INteresse gefunden als gedacht, wie wäre es dann wenn man gleich eine Art universelles Programm schreibt um alle solche Fälle abzudecken?

Quasi eine Art Tool dem man sagt welche Applikation man mit bestimmten bedingungen starten möchte.

Sollte jetzt auch nicht der riesen Aufwand sein, nur das meine C Kentnisse das bestimmt weiter übersteigt :D

Die Idee mit ESpinage find ich sehr unprofessionell, da 1. externes Programm, 2. Mit dem Programm bestimmt viel anderes mitkommt, Und so wie es heßt würde ich der ganzenSache auch nicht vertrauen.

Glaue ich habe hier sogar mal einem user geholfen das Ding zu deinstllieren :D


Naja jetzt ist Wochenende, Zeit meine C Kentnisse zu prüfen ;)
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Quasi eine Art Tool dem man sagt welche Applikation man mit bestimmten bedingungen starten möchte.
Ich glaube, das Interesse ist eher theoretischer Natur, da es kaum reale Nutzungsszenarien dafür gibt.

Üblicherweise decken betriebssystemseitige Lese-/Ausführungsrechte (z.B. /Applications vs. ~/Applications) und programmseitig implementierte Loginsysteme 99% des Bedarfes ab.
 

Loooki

Beauty of Kent
Registriert
15.09.09
Beiträge
2.169
Das in der Info.plist definierte, ausführbare "Hauptprogramm" eines *.app Pakets kann sehr wohl auch ein simples Shellskript sein.

Genaues Vorgehen bitte?

Code:
test -d /Blub/Blah/Directory

Und weiter? Wo was eintragen etc? ;)
 
Zuletzt bearbeitet:

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Das in der Info.plist definierte, ausführbare "Hauptprogramm" eines *.app Pakets kann sehr wohl auch ein simples Shellskript sein.
Hmm... Hatte ich vor dem Posten ausprobiert und das Script wollte nicht. a+x war gesetzt und #!/bin/bash war als Interpreter eingetragen.

Und dann? Wenn der Dämon den Prozess iTunes überwacht, geht da gar nichts
Und das hat jetzt genau was mit dem Beitrag zu tun, auf den ich mich bezog?
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Wir schreiben anscheinend aneinander vorbei :):p
 
Zuletzt bearbeitet:

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Genaues Vorgehen bitte?
Naja, nehmen wir mal an du hast im Programme-Ordner eine App namens "Sample.app". In der Info.plist dieses Pakets ist als 'Bundle Executable' das eigentliche Programm 'sample' eingetragen (...welches unter OS X natürlich im OS-spezifischen Unterordner 'MacOS' gesucht wird).
Dieses 'sample' Binary benennst du jetzt einfach auf zweckmässige Weise um, zB in ein '_sample'.
Dann erstellst du anstelle des ursprünglichen Namens ein neues Skript, welches natürlich das "execute" Recht gesetzt haben muss.
Hier werden als Beispiel für den Zweck der ganzen Aktion dem Programm einige zusätzliche Kommandozeilenparameter mit auf den Weg gegeben. Dieses Array kann man natürlich auch einfach leer lassen, wenn man ganz was anderes vor hat als hier demonstriert.
Den eigentlichen Programmaufruf zB in eine 'if ... then ... else ... fi' Klausel oder ähnliches einzupacken spare ich mir, das sollte schon jeder selbst hinbekommen.
Inhalt:
Code:
#!/bin/sh

[COLOR=#696969][I]# das sollte nie fehlen, sonst droht ((missbrauch_mich++))[/I][/COLOR]

export PATH="/bin:/sbin:/usr/bin:/usr/sbin"
export LC_ALL="C"
export LANG="C"


[COLOR=#696969][I]# ${0} ist die gerade ausgeführte Skriptdatei selbst[/I][/COLOR]

my_self="$( basename "${0}" )"
my_fldr="$( dirname "${0}" )"
my_bin="${my_fldr}/_${my_self}"

my_args=(  [COLOR=#800080]"--debug"  "-v"  "--srcfile" "some filename"[/COLOR]  )

[COLOR=#696969][I]
# ...beliebiger vorbereitender Code[/I][/COLOR]

"${my_bin}"  "${my_args[@]}"  &

##EOF

und #!/bin/bash war als Interpreter eingetragen.
Für sowas empfiehlt sich das "archaische" #!/bin/sh zu benutzen.
Weil /bin/sh dann tatsächlich gar nicht neu geladen, sondern die Bourneshell direkt im Kernel verwendet wird - die "performiert" besser. :)

sedna schrieb:
Und "ein simples Shell Skript" = Ohne Interpreter
Ohne zusätzlichen Interpreter, ja. (s.o.)
Aber ganz ohne? Nee du, eher nicht. Nicht bei einem Skript. :)

BTW
Ein Tip noch: Damit das System "bemerkt", dass das tatsächlich auszuführende Programm sich verändert hat, müssen die "LaunchServices" getriggert werden. Das geht entweder durch simples neu anmelden des Benutzers, oder zB indem man das App Paket kurz aus dem Programme-Ordner herauszieht, den Finder kurz beendet, ihn wieder startet und dann das Paket wieder hineinwirft.
(1001 weitere Wege führen nach Rom, aber das sind wohl die simpelsten.)
 
Zuletzt bearbeitet:

Loooki

Beauty of Kent
Registriert
15.09.09
Beiträge
2.169
@Rastafari Danke, "BundleExecutalbe" wird zusammengeschrieben ;)
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Du zerpflügst meine Worte.:eek:
Es ist alles richtig, was du schreibst und ich möchte auch feststellen, dass du dich mit Sicherheit auf diesem Terrain auch besser auskennst als ich.
Ich wollte auf etwas anderes hinaus, habe aber schon viel zu viel hier geschrieben. Ausserdem dient es nicht der eigentlichen Frage.
Um Missverständnisse zu vermeiden, werde ich meine letzten Beiträge editieren!

Danke auch für die detaillierte Anleitung!
Für iTunes würde ich es persönlich nicht so machen, sondern mit dem von mir beschriebenen Weg.... aber das ist Ansichtssache.

Gruß