Shell Skript oder App aus App starten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Shell Skript oder App aus App starten

    Hallo, ich bin der Neue und komme jetzt öfters mal vorbei :)


    #ifndef _FROHES_NEUES_
    #define _FROHES_NEUES_
    /* Tröööt!! */
    #endif // #ifndef _FROHES_NEUES_


    Ich suche nach hilfreichen Tipps, wie ich mein Mac Programm zum Laufen bekommen könnte.

    Aber fangen wir mal vorne an und ich erkläre, was ich vor habe:

    Ich habe eine bestehende GUI App (BasiliskII), die möchte ich aus meiner App starten.
    Meine App ist nur ein einfaches Fenster unter OS X mit einem Button.

    Also nahm ich mir xCode, erstellte ein Fenster, zog einen Button in das Fenster und verknüpfte mit dem hilfreichen Editor folgenden Code:

    Quellcode

    1. //
    2. // AppDelegate.swift
    3. // OS 7
    4. //
    5. // Created by Knuddlmac on 07.01.18.
    6. // Copyright © 2018 Knuddlmac. All rights reserved.
    7. //
    8. import Cocoa
    9. @NSApplicationMain
    10. class AppDelegate: NSObject, NSApplicationDelegate {
    11. @IBOutlet weak var window: NSWindow!
    12. func applicationDidFinishLaunching(_ aNotification: Notification) {
    13. // Insert code here to initialize your application
    14. }
    15. func applicationWillTerminate(_ aNotification: Notification) {
    16. // Insert code here to tear down your application
    17. }
    18. @IBAction func startApp(_ sender: NSButton) {
    19. let path = "/Users/knuddlmac/BasiliskII/sudo"
    20. let arguments = ["open", "-a", "BasiliskII.app"]
    21. Process.launchedProcess(launchPath: path, arguments: arguments)
    22. }
    23. }
    Alles anzeigen



    Meine Anwendung wird gestartet, doch wird die darin aufgerufene Anwendung nicht wie erwartet ausgeführt. - Mit einem simplen Shell Skript "say Hallo Weihnachtsmann!" funktioniert es.
    Scheitere ich hier an den Einstellungen einer Sandbox oder eines zwingend erforderlichen Root Users?

    Über hilfreiche Tipps freue ich mich!

    Euer
    Perf!
  • Herzlich Willkommen! :)

    Führe doch einmal Dein Kommando im Terminal aus. Also zumindest bei mir werde ich - selbst nach su auf einen administrativen User - aufgefordert, dessen Passwort für ein sudo einzugeben. Hast Du bei Dir die sudoers-Datei verändert? Wenn nicht, dürfte das der Stolperstein sein.

    Eine Alternative wäre, das Passwort über stdin mitzugeben ... aber ob man das will?

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Herzlich Willkommen!

    Trotzdem. Was soll das? Privilege escalation for dummies 101?

    Du hast ein sudo Binary in einem Unterverzeichnis eines Users "/Users/knuddlmac/BasiliskII/sudo"? Echt jetzt? /usr/bin/sudo reicht nicht?

    Jemand, der weiß wozu sudo gut ist, weiß wie es benutz wird und stellt die Frage nicht. Jemand der, der diese Frage stellt, weiß nicht wozu sudo gut ist, und sollte es nicht anfassen.

    Ich bin nicht bösartig (nur etwas angefressen, weil ich gerade Porzellan in der Küche zerscheppert habe. Andere Gechichte…)… In guter Absicht: Was willst Du erreichen?
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?
  • @all

    Thnaks :) for the warm welcome!

    @MyMattest:

    Genau, wenn ich nur das Skript starte, löste ich gleich zweimal eine Passworteingabe aus. Einmal vom Skript selbst, da als Superuser ausgeführt und ein zweites Mal für den Superuser Aufruf der App im GUI Kontext, also mit eigenem Fenster bereitgestellt vom macOS.

    Eigentlich erwartete ich beim Ausführen der Swift APP ebenfalls automatisch eine Passwortabfrage. - Müßte ich diese erst synthetisch erzeugen und wenn ja, wie?

    Kurze Zusatzinfo: Nein, die Sudoers-Datei soll nicht verändert werden.


    @torquato:

    Klar, "Raider" kenne ich noch!

    Keine Sorge, es handelt sich nicht um einen Rechner aus dem produktiven Umfeld. - Nicht mal der Mac an dem ich gerade schreibe hat Kontakt. J

    Der Hintergrund ist ganz simpel: Ich implementiere gerade ein Netzwerk-Routing (TunTup) für das AFP-Protokoll und muss überhaupt erst einmal IP-Pakete am richtigen Ende empfangen. Dazu isoliert man das Environment, baut ein geschlossenes Intranet auf, schaltet die Firewall aus und macht Sachen, die rollen einem Linux-Administrator garantiert die Fussnägel hoch! - Funktioniert aber hervorragend und kann anschliessend wieder mit angemessenen Nutzerrechten stabilisiert werden. - Zumindest hoffe ich das. Doch noch habe ich nur die Anwendung zusammen mit einem alten SE/30 zufriedenstellend mit einem SCSI-Interface seit ein paar Stunden am Laufen und weiss noch nicht, ob ich alle beteiligten Elemente später beliebig konfigurieren kann.
    Mal schaugn!

    Aber erstmal meinen Dank für diese Warnung!
    Vielleicht sollte ich Dich später zum Porzellantest einladen. Dann könntest Du sicherlich dazu beitragen, dass alles so gut als möglich getestet wird und alltagstauglich nutzbar ist. Alles non Profit, alles für den Club! :)
  • Ich habe nun einen ganz simplen Aufruf - ohne spezielle Nutzerrechte - für die Rechner.app erstellt.
    Doch auch hier startet die Anwendung leider nicht.

    Nachfolgend der betreffende Quellcode zum Knöpfchen:

    Quellcode

    1. @IBAction func startApp(_ sender: NSButton) {
    2. let path = "/Applications"
    3. let arguments = ["open", "Calculator.app"]
    4. Process.launchedProcess(launchPath: path, arguments: arguments)
    5. }

    Ebenfalls erfolglos probiert:

    let arguments = ["open", "-a", "Calculator.app"]

    Und hier noch fix die Ausgabe auf der xCode Konsole:

    Quellcode

    1. 2018-01-08 11:10:54.654637+0100 OS 7[2576:320216] Failed to connect (startApp) outlet from (OS_7.AppDelegate) to (NSButton): missing setter or instance variable
    2. 2018-01-08 11:10:56.729271+0100 OS 7[2576:320216] [General] Couldn't posix_spawn: error 13
    3. 2018-01-08 11:10:56.731391+0100 OS 7[2576:320216] [General] (
    4. 0 CoreFoundation 0x00007fffa76f357b __exceptionPreprocess + 171
    5. 1 libobjc.A.dylib 0x00007fffbc9521da objc_exception_throw + 48
    6. 2 CoreFoundation 0x00007fffa7770c55 +[NSException raise:format:] + 197
    7. 3 Foundation 0x00007fffa913b4ae -[NSConcreteTask launchWithDictionary:] + 3134
    8. 4 Foundation 0x00007fffa928260a +[NSTask launchedTaskWithLaunchPath:arguments:] + 195
    9. 5 OS 7 0x00000001065c7fda _T04OS_711AppDelegateC05startB0ySo8NSButtonCFTf4dd_n + 234
    10. 6 OS 7 0x00000001065c7ca9 _T04OS_711AppDelegateC05startB0ySo8NSButtonCFTo + 9
    11. 7 libsystem_trace.dylib 0x00007fffbd4653a7 _os_activity_initiate_impl + 53
    12. 8 AppKit 0x00007fffa58de721 -[NSApplication(NSResponder) sendAction:to:from:] + 456
    13. 9 AppKit 0x00007fffa53c2cc4 -[NSControl sendAction:to:] + 86
    14. 10 AppKit 0x00007fffa53c2bec __26-[NSCell _sendActionFrom:]_block_invoke + 136
    15. 11 libsystem_trace.dylib 0x00007fffbd4653a7 _os_activity_initiate_impl + 53
    16. 12 AppKit 0x00007fffa53c2b44 -[NSCell _sendActionFrom:] + 128
    17. 13 AppKit 0x00007fffa5405539 -[NSButtonCell _sendActionFrom:] + 98
    18. 14 libsystem_trace.dylib 0x00007fffbd4653a7 _os_activity_initiate_impl + 53
    19. 15 AppKit 0x00007fffa53c1426 -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 2481
    20. 16 AppKit 0x00007fffa5405272 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 798
    21. 17 AppKit 0x00007fffa53bfddb -[NSControl mouseDown:] + 832
    22. 18 AppKit 0x00007fffa5a5a24f -[NSWindow(NSEventRouting) _handleMouseDownEvent:isDelayedEvent:] + 6341
    23. 19 AppKit 0x00007fffa5a56a6c -[NSWindow(NSEventRouting) _reallySendEvent:isDelayedEvent:] + 1942
    24. 20 AppKit 0x00007fffa5a55f0a -[NSWindow(NSEventRouting) sendEvent:] + 541
    25. 21 AppKit 0x00007fffa58da681 -[NSApplication(NSEvent) sendEvent:] + 1145
    26. 22 AppKit 0x00007fffa5155427 -[NSApplication run] + 1002
    27. 23 AppKit 0x00007fffa511fe0e NSApplicationMain + 1237
    28. 24 OS 7 0x00000001065c7de9 main + 9
    29. 25 libdyld.dylib 0x00007fffbd233235 start + 1
    30. 26 ??? 0x0000000000000003 0x0 + 3
    31. )
    Alles anzeigen
    missing setter or instance variable?


    Eigentlich wollte ich mir nur kurz die Konsolentipperei ersparen, doch jetzt beschäftigt mich ein fehlender Setter...

    Hat jemand einen hilfreichen Tipp, welchen grundsätzlichen Fehler ich hier offensichtlich begehe?
  • Den ersten Fehler konnte ich beheben, es lag an der Verknüpfung zur XIB-Datei.
    Diese ging verloren und konnte nur durch ein neues Projekt wiederhergestellt werden. - Muss ein neues Feature sein. J

    Der nächste Fehler scheint wohl eine Zugriffsverletzung zu sein.

    Calculator.app ist ein Verzeichnis. - Also änderte ich den Aufruf mittels Button wie folgt ab:

    Quellcode

    1. @IBAction func startApp(_ sender: NSButton) {
    2. let path = "/Applications"
    3. let arguments = ["open", "Calculator.app/Contents/MacOS/Calculator"]
    4. Process.launchedProcess(launchPath: path, arguments: arguments)
    5. }

    Und stecke immer noch mit dem Fehler 'error 13' in der xCode Konsole fest:

    Quellcode

    1. 2018-01-08 12:28:17.238453+0100 Start OS 7[3908:639259] [General] Couldn't posix_spawn: error 13
    Hat damit schon mal jemand Erfahrung gemacht und kennt einen möglichen Lösungsansatz?
  • Danke Mattes, stimmt!

    Mit weggehexten Parametern schaut es dann so aus:

    Quellcode

    1. @IBAction func startApp(_ sender: NSButton) {
    2. let path = "/Applications/Calculator.app/Contents/MacOS/Calculator"
    3. let arguments = [""]
    4. Process.launchedProcess(launchPath: path, arguments: arguments)
    5. }

    Und es passiert schon etwas mehr:

    Quellcode

    1. Crashed Thread: 0 Dispatch queue: com.apple.main-thread
    2. Exception Type: EXC_BAD_INSTRUCTION (SIGILL)
    3. Exception Codes: 0x0000000000000001, 0x0000000000000000
    4. Exception Note: EXC_CORPSE_NOTIFY
    5. Termination Signal: Illegal instruction: 4
    6. Termination Reason: Namespace SIGNAL, Code 0x4
    7. Terminating Process: exc handler [0]
    8. Application Specific Information:
    9. dyld: launch, running initializers
    10. /usr/lib/libSystem.B.dylib
    11. Could not set sandbox profile data: Operation not permitted (1)
    Alles anzeigen
    Der Sandkasten ist wohl noch nicht richtig eingerichtet. - Aktiviert ist die Sandbox aber.