Anwendungspfad herausfinden

  • Und schon das nächste Problemchen.

    Ich möchte gerne eine Anwendung starten (nehmen wir mal Word). Nur weis ich nicht wie der Pfad ist, da der ja variabel sein kann. Wie finde ich den raus ? Vielleicht über die Registrierung?

    Nur mal ein Tip bitte, wie man das am Besten löst.

  • [autoit]

    Func _getProcessPath($ProcessName)
    Local $Item
    Local $Object = ObjGet("winmgmts:\\localhost\root\CIMV2")
    If @error Then Return SetError(2, 2, '')
    For $Item In $Object.ExecQuery ("SELECT ExecutablePath FROM Win32_Process WHERE Name='" & $ProcessName & "'", "WQL", 48)
    Return $Item.ExecutablePath
    Next
    Return SetError(1, 1, '')
    EndFunc

    [/autoit]

    Ermittelt den Pfad eines laufenden Prozesses, also wo die Exe liegt.

    Greetz qon

  • Hmm nicht das was ich meine. Die Exe läuft nicht !

    Stellt euch eine GUI vor mit einem Button "Word starten". Diese GUI läuft auf einem fremden Rechner der Office nicht im Standard Ordner hat.

    Wie finde ich den Installationspfad von Word heraus ?

  • @peethebee

    Jep in diesem Fall schon. Nun nehmen wir mal z.B. die Mp3matePro.exe (Mp3 Splitter & Joiner). Da funktioniert das nicht mehr.

    Hach ich wustte doch das ich nicht Word nehmen sollte :(

  • Hi,

    ah sorry hatte falsch gelesen.
    Ja dann könnte eventuell etwas in der Registry stehen,
    musst eben an der richtigen Stelle schauen, ob das gewünschte Programm dort Eintragungen hinterlegt hat ;)

    Greetz

  • Ja stimmt, da steht einiges. Ist allerdings HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\MUICache

    Kann mir einer mal ne kurze Einweisung geben wie ich da jetzt einen Pfad raus bekomme. Der Name der EXE ist bekannt. Ich glaub ich kapier da nicht wirklich. Probier aber auch parallel.

  • Ich hatte das Problem auch mal mit nem anderen Prog (ich glaub das war sogar hier in dem Forum).

    [autoit]

    #RequireAdmin
    #include <GUIConstantsEx.au3>

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

    Global $i

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

    While True ; Get Path from S4 by using the software-installed information in registry
    $i +=1
    $keyname = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\", $i)
    If @error Then ExitLoop

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

    $result = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & $keyname, "DisplayName")
    If $result = "S4 League_EU" Then
    $s4path = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & $keyname, "InstallLocation")
    ExitLoop
    EndIf
    WEnd

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

    ShellExecute($s4path & "\patcher_s4.exe", "", $s4path) ; Run Patcher

    [/autoit]

    Ist jetzt ein anders Prog. Wie man das "S4 League_EU" jetzt ersetzt... bin da noch zu unerfahren^^

  • Wenn du es von MUICache auslesen willst dann vielleicht so?:

    Spoiler anzeigen
    [autoit]

    Global $Dateiname = "spider.exe"
    Global $Pfad

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

    $Pfad = CheckFileNameInMUICache($Dateiname)
    If @error Then
    MsgBox(0, "Fehler", "Nichts gefunden")
    Else
    MsgBox(0, "Pfad", $Pfad)
    EndIf

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

    ; by AspirinJunkie
    Func CheckFileNameInMUICache($sFN, $sKey = "HKCU64\Software\Microsoft\Windows\ShellNoRoam\MUICache", $iCaseSense = 2)
    Local Const $iFNLen = StringLen($sFN)
    Local $iC = 1, $sVal
    While True
    $sVal = RegEnumVal($sKey, $iC)
    If @error Then ExitLoop
    If StringRight($sVal, $iFNLen) = $sFN Then Return $sVal
    $iC += 1
    WEnd
    Return SetError(1, 0, "")
    EndFunc

    [/autoit]


    Alternative dazu wäre die Brute-Force-Methode: Einfach mal alle Laufwerke nach der Datei absuchen...

    4 Mal editiert, zuletzt von AspirinJunkie (21. März 2010 um 13:12)

    • Offizieller Beitrag

    Die Softwareersteller halten sich hier leider an keine gemeinsamen Normen. Und somit findest du die Verweise auf den Installationsort auch an ganz unterschiedlichen Stellen.
    Ein häufig verwendeter Schlüssel ist: HKEY_LOCAL_MACHINE\SOFTWARE
    Hier tragen sich viele Programm ein. Mußt du durch die Schlüssel iterieren. Im Allgemeinen ist Hersteller oder Produktname auch der Schlüsselname. Dann mußt du den Schlüssel nach Path, InstallDir oder ähnlichem durchsuchen. Wenn du das Programm bei dir installiert hast, weißt du ja in welcher Form der Schlüssel angelegt wird.
    Im Unterschlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall tragen auch viele (leider nicht alle) Installer den Installationsort ein.