Launcher muss vor eigentlichem Programm Start geöffnet werden.

  • Hallo,

    hoffe ihr könnt mir helfen:

    Habe einen Launcher für ein Programm (nur über diese exe soll dasProgramm gestartet werden können), der Launcher öffnet die programm.exe. (Soweit bin ich schon) Jetzt soll irgendwie in die programm .exe ein Befehl rein, sodass diese nur gestartet werden kann, wenn man den Launcher gestartet hat.

    Leon

    Einmal editiert, zuletzt von Masterking1996 (15. Dezember 2010 um 12:46)

  • Streng geheim
    [autoit]


    if ProcessExists("launcher.exe") = 0 then
    msgbox(0,"Upps","Programmstart nur über Launcher möglich")
    exit
    endif

    [/autoit]

    processExists überprüft ob der launcher gestartet ist.
    allerdings kann die programm.exe so auch ohne launcher gestartet werden, solange der launcher irgendwo im hintergrund offen ist

    Edit:
    sollte das programm nur über den launcher gestartet werden hätte ich folgende provisorische idee:

    in den launcher packst du in die _runProgramm () (die funktion mit der du programm.exe startest) folgendes (brauchst noch #Include <File.au3>):

    _FileCreate("launch.temp")
    <== hier kommt der befehl run("programm.exe") ==>
    filedelete("launch.temp")

    das erzeugt die datei launch.temp, bis das programm ausgeführt wird

    und im programm überprüfen wir ob die launch.temp existiert (== ob programm.exe über den launcher aufgerufen wurde) mithilfe von

    if fileexists($filepath & "launch.temp") = 0 then
    msgbox(0,"Upps","Programmstart nur über Launcher möglich")
    exit
    endif

    Einmal editiert, zuletzt von zombie36 (15. Dezember 2010 um 12:39)

  • Da kommt Erorr Missing separator charakter after keyword

    Edit: Und wenn es als .exe ist kommt: Error: Error parsing function call

  • Mit $CMDLINE (Sicherheitslücke ist nur, dass man dann auch ohne Launcher starten kann, wenn man den richtigen Param angibt):
    Launcher:

    [autoit]

    Run("Programm.exe startByLauncher")

    [/autoit]


    Programm:

    [autoit]

    If $CMDLINE[0]=0 Then Exit
    If $CMDLINE[1]<>"startByLauncher" Then Exit

    [/autoit]
  • wie zombie schrieb kann das Programm auch aufgerufen werden wenn der Launcher auch nur an ist bzw. ein Prozess mit diesem Namen existiert.
    Etwas sicherer wäre es daher den ParentProcess des Skriptes zu überprüfen:

    Spoiler anzeigen
    [autoit]

    If ProcessGetParentProcess(@AutoItPID) = ProcessExists("launcher.exe") Then
    MsgBox(0,"", "Prozess wurde vom Launcher aufgerufen")
    Else
    MsgBox(0,"", "Prozess wurde nicht vom Launcher aufgerufen")
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Gibt die Process-ID des Prozesses zurück der den angegebenen Prozess erzeugt hatte
    Func ProcessGetParentProcess($PID)
    ;by AspirinJunkie
    Local Static $oWMI = ObjGet("winmgmts:\\localhost\root\CIMV2")
    $PID = ProcessExists($PID)
    If $PID = 0 Then Return SetError(1,0,0)

    [/autoit] [autoit][/autoit] [autoit]

    For $oItem In $oWMI.ExecQuery("SELECT ParentProcessId FROM Win32_Process WHERE ProcessId=" & $PID, "WQL", 0x20 + 0x10)
    Return $oItem.ParentProcessId
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Return SetError(2,0,0)
    EndFunc

    [/autoit]


    Dann könnte man das Programm zwar immer noch starten wenn man ein Programm schreibt welches launcher.exe heißt und über dieses dein Programm startet.
    Jetzt könnte man dies auch wieder umgehen in dem man den Pfad des ParentProcess bestimmt und eine Hashshumme erzeugt um zu überprüfen ob die exe des Parentprocess die richtige ist.