Teamviewer Taskkill
Ebenfalls benötigen wir für das hier Admin-Rechte.
Man möchte mit einem Kunden eine Fernwartung über TeamViewer starten. Der Kunde lädt den QuickSupport von der eigenen Webseite herunter. Aber es läuft schon ein TeamViewer. Klar bekommt man den Kunden dazu, im Tray Rechtsklick auf das TeamViewer-Symbol zu machen („dann ist dort ein Pfeil nach oben, den noch mal klicken, und gucken, ob das Symbol da ist“) und es zu schließen („nein, da müsste ‚Teamviewer Beenden‘ ganz unten sein“), allerdings frisst das auch jedes mal ordentlich Zeit. Ideallösung wäre natürlich, wenn man einen Wrapper um den QuickSupport bastelt, der erst vorhandene TeamViewer-Prozesse abschließt, und dann erst den eigenen TeamViewer startet.
Batch
Hinweis zu diesem Code: hier senden wir erst freundlich den Hinweis, dass TeamViewer sich bitte schließen mag (SIGTERM). Im Anschluss warten wir drei Sekunden (Ping-Befehl, Batch kann das nicht wirklich zuverlässig) und killen ihn dann explizit. Alternativ gehen auch nur die letzten zwei Zeilen, aber das ist rude, das macht man i.d.R. nicht.
@taskkill /IM teamviewer.exe
@taskkill /IM teamviewer_service.exe
@ping -n 3 localhost
@taskkill /F /IM teamviewer.exe
@taskkill /F /IM teamviewer_service.exe
Code-Sprache: CSS (css)
Bonus-Info: wollen wir keine Ausgabe in der CMD, können wir an jede Zeile 2> null
anhängen.
C#
Hinweis: benötigtes Packet ist in System.Diagnostics
. Ein SIGTERM ist hier (ohne Umwege, z.B. Invoken von taskkill
in der CMD) nicht möglich, daher geht nur der unschöne Weg, direkt SIGKILL.
// In dieser Variable merken wir uns die Prozesse, die wir killen wollen
List<Process> toKill = new List<Process>();
// Auslesen aller Prozesse
Process[] allProcess = Process.GetProcesses();
for(int i = 0; i < allProcess.length; i++) {
if(allProcess[i].ProcessName == 'teamviewer') toKill.Add(allProcess[i]);
if(allProcess[i].ProcessName == 'teamviewer_service') toKill.Add(allProcess[i]);
}
// Killen der beiden Teamviewer-Prozesse. Das "true" killt auch ChildProcesses
for(Process s in allProcess) s.Kill(true);
Code-Sprache: PHP (php)
Powershell
Hier gilt bzgl. SIGTERM und SIGKILL das gleiche wie für C# – nur SIGKILL ist möglich, wenn man nicht über taskkill
geht. Das -Force
ermöglicht es, den Prozess zu beenden, wenn er unter einem anderen User läuft; zum Beispiel dem lokalen Dienstkonto.
Get-Process -Name "teamviewer" | Stop-Process -Force
Get-Process -Name "teamviewer_service" | Stop-Process -Force
Code-Sprache: JavaScript (javascript)