Programm versteckt starten (hidden)

  • Hallo zusammen

    Wie kann ich ein Prozess und alle Subprozesse davon - versteckt starten?

    Ich soll das AMD (ATI) Catalist Control Center einmalig beim login starten - und später wieder schliessen. Bitte stellt nicht die Sinnfrage - der erschliesst sich auch mir nicht.

    Das Problem ist, dass der Shortcut auf "CLI.exe Start CCC" verweisst, der dann wieder einen eigenen Prozess startet. Den ersteren bekomme ich mit @SW_HIDE versteckt - der zweite ist dann sichtbar.

    Leider braucht man zum testen selber eine AMD / ATI Grafikkarte. Aber von der Therorie her - könnt ihr mir sicher helfen. Da ich nicht ausschliessen kann, das die CLI.exe der CCC.ese Parameter übergibt - die mir beim direkten Start der CCC.exe fehlen würden - würde ich gerne das "Standardverfahren" nutzen.

    Das heisst ich müsste verhindern, dass subprozesse plötzlich den ohne SW_HIDE daherkommen. Runas oder als Servicestarten möchte ich nicht anwenden.

    Danke für eure Tips ;)

  • Da es vermutlich nicht ganz einfach ist rauszufinden was die CLI.exe genau tut, ausser das eigentliche Control Center zu starten führt vermutlich kein weg daran vorbei das anschließend erscheinende Control Center Fenster anhand des Fenstertitels sofort wieder mit winsetstate(...) unsichtbar zu machen. Dabei wird sich ein kurzes aufblitzen nicht vermeiden lassen.

    Alternativ würde ich einfach mal den ATI Support zur Aufgabe der CLI.exe befragen um ggf. die darin enthaltenen Funktionen zum Control Center Start selbst umzusetzen. Ansonsten eben mal den direkten Start der CCC.exe ausprobieren und schauen ob das Verhalten auch ohne "CLI.exe Start..." normal ist.

  • Ahja sofern du nur prüfen willst ob und welche Parameter die CLI.exe an die CCC.exe übergibt kannst du auch eine eigene CCC.exe schreiben die dir ausgibt mit welchen Parametern sie gestartet wird und die originale ccc.exe damit temporär ersetzen. Das liefert dir zumindestens die verwendeten Parameter. Ob die CLI.exe noch weitere "wichtige" Dinge tut kannst du so aber leider nicht prüfen.

    EDIT:

    Oder du machst das zur dauerhaften Lösung.

    Du rufst "cli.exe start CCC" mit sw_hide auf, dadurch wird dann deine eigene CCC.exe gestartet und darüber startest du dann die originale ccc.exe mit sw_hide und den empfangenen Parametern. Also eine Art Proxy zwischen CLI.exe und originaler CCC.exe

    Problem1: Sofern ein Anwender das CCC sichtbar starten will wird er das nicht mehr können. Dafür lässt sich aber evtl. auch eine Lösung finden, z.B. eine etwas intelligentere fake ccc.exe, die unterscheiden kann ob sichtbar oder unsichtbar gestartet werden soll.
    Problem2: Updates des Treibers könnten deine fake ccc.exe evtl. überschreiben

    Beide Probleme könnte man in den Griff bekommen wenn man so vorgeht:

    1. Main Script für autostart ordner

    • benennt originale ccc.exe um nach ccc_org.exe
    • kopiert eigene ccc.exe in den richtigen ordner
    • startet CLI.exe
    • wartet bis sich eigene ccc.exe gelöscht hat
    • kopiert ccc_org.exe nach ccc.exe
    • jeder weitere Aufruf der normalen Verknüpfung startet jetzt wieder die originale ccc.exe, somit sichtbar für den benutzer
    • updates machen keine Probleme, weil die fake ccc.exe immer beim login von einem sicheren Ort aus kopiert wird

    2. eigene ccc.exe

    • liest $cmdlineraw
    • startet ccc_org.exe $cmdlineraw mit @sw_hide
    • löscht sich selbst

    Problem 3: Möglicherweise unterbindet UAC oder die Benutzergruppe des Accounts, dass dein Script im Programmordner Dateien löschen/umbenennen/kopieren kann. Hier müsstest du dann ggf. entsprechende Dateizugriffsrechte vergeben.

    6 Mal editiert, zuletzt von misterspeed (5. März 2013 um 19:14)

  • Greifen irgendwelche Service auf die Datei zu ?
    Wenn die exe als Instanz gestartet wird findet eine Kommunikation statt ?

    Würd die nich einfach so umbennen.
    (Vllt autostart eintrag löschen?)

    -