2016-12-27 16 views
0

Ich mache einen Windows-Bot in C#, ein Teil von ihm läuft Apps von für z. ! d Befehl führt die Discord App aus oder! sp führt die Spotify App aus. Wenn ich es mit cmd mache, läuft einige von ihnen gut, aber einige wie Discord und Visual Studio Code hängt von der Konsole ab, das bedeutet, wenn ich die Konsole schließe, wird die App auch heruntergefahren.Apps von Konsole runed hängt davon ab

  if (input == "!d") { 
      ProcessStartInfo start = new ProcessStartInfo(); 
      start.FileName = @"C:\Users\User\AppData\Local\Discord\app-0.0.296\Discord.exe"; 
      Process.Start(start); 
      Run(); 
     } 

Dieser Code verwende ich zum Starten der Anwendungen. Sollte ich etwas anderes in C# verwenden, um App unabhängig von cmd zu machen? Oder sind es nur Apps Fehler?

+1

Haben Sie versucht, mit: ' UseShellExecute = true;? ' – McNets

Antwort

0

Sie können eine kleine Hostanwendung schreiben, die den Zielprozess ausführt und auf den Exit wartet. Dann kann Ihre Bot-Anwendung den Host ausführen und sofort beenden.

Code für die Host-App - das erste Argument ist der Pfad zur Zielanwendung. Ich verwende Windows-API-Konsolenfenster zu verbergen:

using System; 
using System.Diagnostics; 
using System.Runtime.InteropServices; 

namespace AppHost 
{ 
    class Program 
    { 
     [DllImport("kernel32.dll")] 
     static extern IntPtr GetConsoleWindow(); 

     [DllImport("user32.dll")] 
     static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

     const int SW_HIDE = 0; 

     private static void Main(string[] args) 
     { 
      var handle = GetConsoleWindow(); 
      ShowWindow(handle, SW_HIDE); 

      var start = new ProcessStartInfo { FileName = args[0] }; 

      var process = Process.Start(start); 
      process.WaitForExit(); 
     } 
    } 
} 

-Code für die Bot - Bitte beachten Sie, dass der Pfad zu der Zielanwendung in doppelten Anführungszeichen sein muss:

var start = new ProcessStartInfo 
{ 
    FileName = "AppHost.exe", 
    Arguments = @"""C:\Program Files (x86)\Microsoft VS Code\Code.exe""", 
}; 


var process = Process.Start(start); 
Verwandte Themen