2017-08-23 6 views
1

Ich habe einen Prozess, der als root im Hintergrund ausgeführt wird. Wenn eine bestimmte gerade auftritt, habe ich es ein NSAlert mit einem NSTextField auf, damit der Benutzer einige Informationen bereitstellen kann. Der Benutzer kann jedoch nicht auf das TextField klicken oder etwas darin eingeben. Ich kann das Benachrichtigungsfeld umherziehen und auf die Schaltflächen des Alerts klicken.NSAlert-Eingabeaufforderung für die Texteingabe, die von einem Prozess ausgelöst wird, der als root ausgeführt wird

Ich vermute, das liegt daran, dass mein Prozess als root ausgeführt wird und nicht das Endbenutzerkonto, das auf dem Computer angemeldet ist. Gibt es eine Möglichkeit, dies einfach zu umgehen, ohne einen separaten Prozess als Benutzer hervorzurufen und die Informationen über verteilte Objekte oder Ähnliches zurückzuleiten?

+0

"Ich vermute, das liegt daran, dass mein Prozess als root ausgeführt wird und nicht das Endbenutzerkonto, das auf dem Computer angemeldet ist." Que !? Es klingt wie eine bizarre Aussage für mich. –

+0

Wie so? Mein Prozess läuft als root. Es startet, sobald das Gerät eingeschaltet ist. Es wird ausgeführt, ob jemand am Computer angemeldet ist oder nicht. Wenn jedoch jemand an der Maschine angemeldet ist, muss ich manchmal beim Endbenutzer nach Eingabe fragen. Also versuche ich einen NSAlert zu veröffentlichen. – Tagnal

Antwort

1

Die beste Sache zu tun ist, Ihre UI-Sachen als der aktuelle Benutzer laufen zu lassen, nicht nur wegen solcher Probleme, sondern auch, weil eine GUI-App als root eine große Anzahl von Sicherheitsrisiken führt, und tatsächlich dort In der Vergangenheit gab es eine Reihe von Sicherheitslücken, die durch einen AppKit-fähigen Prozess verursacht wurden, der als root ausgeführt wurde.

Mit diesem gesagt, XPC ist der Mechanismus, den Sie für die Kommunikation zwischen dem Root-Tool und der GUI-App, nicht verteilte Objekte, die ziemlich antiquiert und hat eine Reihe von eigenen Problemen.

Verwandte Themen