Frage

Ich habe 2 Programme (.exe), die ich in .NET erstellt haben. Wir werden sie der Meister nennen und der Arbeiter. Der Master startet 1 oder mehr Arbeiter. Der Arbeiter wird nicht mit vom Benutzer interagiert werden, aber es ist eine WinForms-Anwendung, die WinForms-Befehle und laufen Komponenten auf der Grundlage der von ihm empfangenen Befehlen aus dem Master.

erhält

Ich möchte die Arbeiter App laufen vollständig versteckt (außer im Task-Manager natürlich zeigt nach oben). Ich dachte, dass ich dies mit dem erreichen konnte StartInfo.CreateNoWindow und StartInfo.WindowStyle Eigenschaften, aber ich habe noch die Client.exe Fenster und Komponenten in Form sehen. Doch es zeigt nicht in der Taskleiste auf.

   Process process = new Process
      {
          EnableRaisingEvents = true,
          StartInfo =
              {
                  CreateNoWindow = true,
                  WindowStyle = ProcessWindowStyle.Hidden

                  FileName = "Client.exe",
                  UseShellExecute = false,
                  ErrorDialog = false,
              }
      };

Was muss ich tun, um Client.exe laufen zu lassen, aber nicht angezeigt?

War es hilfreich?

Lösung

Ihre Nutzung von CreateNoWindow / WindowStyle funktioniert gut auf meinem System mit notepad.exe (z es versteckt ist, aber im Hintergrund läuft), so ist es wahrscheinlich etwas die WinForms-Anwendung tut. Einige Ideen:

Option 1: Wenn Sie den WinForms Arbeitsprozess steuern, können Sie a href außer Kraft setzen <= "http://msdn.microsoft.com/en-us/library/system.windows.forms .control.setvisiblecore.aspx“rel = "noreferrer"> Control.SetVisibleCore versteckt immer das Formular aus. Wenn Sie es nicht wollen, immer verbergen, können Sie ein Befehlszeilenargument, um es passieren, z.B. /hide, die es wird dazu führen, ausgeblendet werden. Beispiel (vorausgesetzt, es ist bereits Code-Behind für die Form):

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
    }

    protected override void SetVisibleCore(bool value)
    {
        // You'd probably want to parse the command line.
        if (Environment.CommandLine.Contains("/hide"))
            base.SetVisibleCore(false);
        else
            base.SetVisibleCore(value);
    }
}

Damit MyForm.exe Ergebnisse in einem Prozess mit einer sichtbaren Form ausgeführt wird. Lauf MyForm.exe /hide führt zu einem Prozess mit einer versteckten Form. Sie könnten das /hide Argument von Ihrem Master-Prozess übergeben, so dann auch normale Benutzer die Anwendung ausgeführt werden sehen, es immer noch.

Option 2: Sie können die Anwendung verstecken, nachdem sie beginnt mit einem P tun / Invoke auf ShowWindow . Weitere Informationen über dieses hier . Dies hat den Nachteil, dass man manchmal die Arbeiter Fenster flackern in Existenz, bevor sie versteckt sehen. Beispiel:

class Program
{
    public static void Main(string[] args)
    {
        ProcessStartInfo psi = new ProcessStartInfo()
        {
            FileName = @"C:\windows\system32\notepad.exe",
        };

        Process process = Process.Start(psi);

        // Wait until the process has a main window handle.
        while (process.MainWindowHandle == IntPtr.Zero)
        {
            process.Refresh();
        }

        ShowWindow(process.MainWindowHandle, SW_HIDE);
    }

    const int SW_HIDE = 0;

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

Andere Tipps

Das Problem mit UseShellExecute = false ist, stellen Sie hier true und der Prozess wird gestartet als versteckt. Verwenden der Shell zum Starten des Prozesses versteht, wie die Anwendung machen versteckt, wo, wie der Prozess direkt mit UseShellExecute = false Starten des Prozesses direkt gestartet wird, und wie Chris Schmich erwähnt, würden Sie behandeln müssen versteckt das Fenster aus dem Inneren der Client-Anwendung. Dies könnte wünschenswerter sein, wenn Sie die Option wollen die Anwendung ausgeführt wird manuell für das Debuggen oder Testzwecke.

Sie müssen hinzufügen base.Visibility = Visibility.Hidden; in Win Form Anwendungskonstruktor.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top