Default Programmverzeichnis von Windows abfragen - Fehler bei x64 OS

  • Mahlzeit,

    nachdem ich doch recht lange ohne Hilfe ausgekommen bin, stehe ich jetzt vor einem Problem, wo ich nicht weiter weiß.
    Das Problem ist eigentlich recht simpel. Ich möchte das default Programmverzeichnis von Windows abfragen, also z.B. "Programme" unter Win7 bzw. "Program Files (x86)" für 32bit Programme unter Win 7 x64.

    Die Abfrage selbst ist nicht wirklich schwer, jedoch bekomme ich unter x64 OS grundsätzlich das x86 Programmverzeichnis ausgegeben.

    Ich habe es mittlerweile sowohl mit der Umgebungsvariable versucht:

    [autoit]

    local $test = EnvGet("ProgramFiles")
    msgbox(0, "", $test)

    [/autoit]

    als auch mit der Abfrage über die Registry:

    [autoit]

    local $lProgramDirectory = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion", "ProgramFilesDir")

    [/autoit]

    Hat einer einen Tipp, woran das liegen könnte bzw. gibt es einen Workaround?

    Danke Euch schon mal im Voraus. :)

    Gruß, phr3n1c

    Einmal editiert, zuletzt von phr3n1c (20. Juni 2010 um 11:46)

  • Danke für den Tipp, aber leider habe ich das bereits hinter den includes angegeben. Funktioniert trotzdem nicht :(

  • Oder du nimmst

    Zitat von Hilfe
    [autoit]

    @ProgramFilesDir

    [/autoit]

    ---> Pfad zum Programme-Ordner (entspricht der Systemvariable %PROGRAMFILES%).

  • Bringt auch das x86 Programmverzeichnis. Habe es unter Win 7 x64 und Server 2k3 x64 getestet.

  • @ProgramFilesDir bringt bei mir unter Win7 x64 "C:\Program Files" ;)
    Hast du eventuell sowas wie #AutoIt3Wrapper_UseX64=n im Code stehen?

    21 is only half the truth.

  • hmm... zumindest nicht bewusst eingetragen.

    Kann das evtl. mit der Option "Use native x64 ... where possible" bei der Installation von AutoIt zusammenhängen?

  • Also es muss wohl soetwas sein. Selbst

    [autoit]

    MsgBox(64, 'DOS', _getDOSOutput('set'))

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

    Func _getDOSOutput($command)
    Local $text = '', $Pid = Run(@ComSpec & ' /c ' & $command, '', @SW_HIDE, 2 + 4)
    While 1
    $text &= StdoutRead($Pid, False, False)
    If @error Then ExitLoop
    Sleep(10)
    WEnd
    Return $text
    EndFunc ;==>_getDOSOutput

    [/autoit]

    gibt mir sowohl für %ProgramFiles% als auch %ProgramFiles(x86)% jeweils C:\Programme (x86) aus.

  • Dann eben so:

    [autoit]

    MsgBox (0, "ProgramFilesDir", _ProgramFilesDir())

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

    Func _ProgramFilesDir()
    If @OSArch <> "x86" Then
    $ProgramFilesDir = @ProgramFilesDir&"(x86)"
    Else
    $ProgramFilesDir = @ProgramFilesDir
    EndIf
    Return $ProgramFilesDir
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Das Makro "@ProgramFilesDir" funktioniert bei mir (Win7, 64 Bit, AutoIt v3.3.6.1) einwandfrei:

    [autoit]


    #AutoIt3Wrapper_UseX64=n
    MsgBox(0, 'ProgramFilesDir', @ProgramFilesDir)

    [/autoit]


    Ergebnis: "C:\Program Files (x86)"

    [autoit]


    #AutoIt3Wrapper_UseX64=y
    MsgBox(0, 'ProgramFilesDir', @ProgramFilesDir)

    [/autoit]


    Ergebnis: "C:\Program Files"

  • Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseX64=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    MsgBox (0, "ProgramFilesDir", _ProgramFilesDir())

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

    Func _ProgramFilesDir()
    If @OSArch <> "x86" Then
    $ProgramFilesDir = StringTrimRight(@ProgramFilesDir,6)
    Else
    $ProgramFilesDir = @ProgramFilesDir
    EndIf
    Return $ProgramFilesDir
    EndFunc

    [/autoit]

    Dann mach es doch auf diese Art.

    21 is only half the truth.

  • AspirinJunkie:
    leider besteht über die Registry das gleiche Problem.

    Werde es wohl nun so versuchen:

    [autoit]

    $programdir = @ProgramFilesDir
    if @OSArch = "X64" then $programdir = StringReplace(@ProgramFilesDir, " (x86)", "")

    [/autoit]

    Ich danke Euch für Eure Hilfe. :)