2017-09-26 1 views
1

Dieses Problem hat mich wütend gemacht.Win C# Subprozess startet nicht von Autologin

Ich habe eine C# Windows Forms-Anwendung (nennen wir es App), die eine C++ - Hochleistungs-ausführbare Datei startet und verwaltet (nennen wir es Compute).

So ist der Prozessbaum in dem Task-Manager sieht aus wie

_App.exe   | CPU | Mem | Disk | Network | 
    |_Compute.exe | CPU | Mem | Disk | Network | 

ich die App soll automatisch beim Systemstart ausgeführt. Bisher habe ich versucht, es in das Shell-Startup-Verzeichnis zu bringen (kann durch win + R search 'shell: startup' gefunden werden) oder es dem Start-Teil von HKeyLocalUser der Registry hinzuzufügen. Ich habe diese Lösungen unter Stackoverflow here gefunden.

Beim Testen startet die App genau wie erwartet, wenn Sie sich anmelden oder den Computer starten. Aber Compute.exe wird nicht ordnungsgemäß gestartet. Der Prozessbaum wie folgt aussieht:

_App.exe  | CPU | Mem | Disk | Network | 
    |_App.exe | - | - | - | - | 

Es sieht aus wie die App als subProzess von selbst gestartet werden kann, und ohne Ressourcen. Wiederum - die Benutzeroberfläche der übergeordneten App startet gut, ist interaktiv, etc. Aber es ist nie in der Lage den Compute-Prozess neu zu starten - auch wenn er vom App-Prozess gezwungen wird.

Ich glaube, es hat damit zu tun, wer die App startet, und dass dieser Besitz auf den Kindprozess überträgt. Es versteht sich von selbst, dass das manuelle Klicken auf die Startverknüpfung den App- und untergeordneten Compute-Prozess ohne Probleme startet.

Irgendwelche Gedanken darüber, was ich hier vermisse? Danke für den Hinweis!

+0

Wenn Sie mit der Berechnung beginnen, verwenden Sie einen relativen oder vollständigen Pfad? –

+0

Ich benutze den vollständigen Pfad über: Directory.GetCurrentDirectory() + Mypath –

+0

Überprüfen Sie den Rückgabewert von 'GetCurrentDirectory'. Ist es das ... NM. Du hast geantwortet, während ich das getan habe. –

Antwort

0

Okay, das war eine Lernerfahrung. Danke an Johnny-Mopp, dass er mich auf den richtigen Weg gebracht hat.

ich die Compute-Prozess startet

startInfo.FileName = Directory.GetCurrentDirectory() + processName; 

in scheinbar allen Fällen Dies funktioniert gut mit, aber der Start-on-login Fall beschrieben.

Es ist eine andere, explizite Option, die beginnt Compute Prozess von der Eltern-Prozess App das Verzeichnis wie folgt:

startInfo.FileName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + processName; 

Dies funktioniert in, wenn der Prozess Compute ausgehend von der übergeordneten App on-startup, at- Anmeldung. Puh.