2017-11-14 2 views
0

Wie kann ich eine C# -Konsolenanwendung nur anhalten, während sie von einem Benutzer ausgeführt wird?Wie kann ich eine C# -Konsolenanwendung anhalten (nur wenn sie von einem Benutzer ausgeführt wird)

Ich habe ähnliche Probleme bei Stack-Überlauf gesucht, die empfehlen, richtig zu debuggen, readline usw., aber keiner von ihnen deckt die Instanz ab, in der Ihr Prozess von einem automatisierten System ausgeführt wird, das gerade weiterlaufen muss (dh nicht pausieren, damit der Benutzer den Bildschirm lesen kann).

Wie kann ich feststellen, ob die Konsole interaktiv wird ausgeführt wird oder durch ein Skript?

Wenn diese bash auf einem Linux-System sind, kann ich etwas tun, wie

https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html

+0

Was bedeutet "von einem automatisierten System ausgeführt werden, das gerade weiterfahren muss"? – Enigmativity

+0

z.B. ein Batch-Skript im Hintergrund, ein anderer Prozess, der nicht direkt von einem Benutzer in einer Konsole ausgeführt wird. –

+0

Was bedeutet „braucht gerade Vergangenheit fortzusetzen“ bedeuten? – Enigmativity

Antwort

0

Console.OpenStandardInput(1) kehrt Stream.Null, wenn die Konsole Anwendung interaktiv nicht ran wird.

private static void pause() 
    { 
     if (Console.OpenStandardInput(1) != Stream.Null) 
     { 
      Console.Out.WriteLine("Press any key to continue"); 
      Console.ReadKey(); 
     } 
    } 
0

Sie müssen überprüfen, ob jemand in als interaktiven Benutzer angemeldet ist, aber dies ist vor allem für den Einsatz mit Dienstleistungen. Einige "automatisierte" Systeme, da Sie einen solchen Begriff erwähnen, täuschen möglicherweise einen angemeldeten Benutzer vor.

Es gibt einige Vorschläge unter: Check if no user is currently logged on to Windows

wahrscheinlich einfachste Weg (vor allem, wenn Sie nicht wollen, auf WMI API verlassen) ist Benutzersitzungen über P/Invoke Aufruf aufzuzählen, wie hier gezeigt: http://www.pinvoke.net/default.aspx/wtsapi32/WTSEnumerateSessions.html

4

einige Kommandozeilenargumente verwenden würde die einfachste Lösung. Wenn beispielsweise das Programm mit dem Befehlszeilenparameter "-automatic" ausgeführt wird, könnte es einfach ohne anzuhalten ausgeführt werden. Ohne ein solches Parameterprogramm würde das Programm im interaktiven Modus laufen und Benutzereingaben erwarten.

Es ist ziemlich Standard-Ansatz von vielen Kommandozeilenprogramme verwendet.

Verwandte Themen