web-dev-qa-db-de.com

So erhalten Sie Programmdateien (x86) unter Windows 64-Bit

Ich benutze:

FileInfo(
    System.Environment.GetFolderPath(
        System.Environment.SpecialFolder.ProgramFiles) 
    + @"\MyInstalledApp"

Um festzustellen, ob ein Programm auf einem Benutzercomputer erkannt wird (ist nicht ideal, aber das Programm, das ich suche, ist ein recht alter Kludge einer MS-DOS-Anwendung, und mir fällt keine andere Methode ein).

Unter Windows XP und 32-Bit-Versionen von Windows Vista funktioniert dies einwandfrei. Unter x64 Windows Vista gibt der Code jedoch den x64-Ordner Programme zurück, während die Anwendung in Programme x86 installiert ist. Gibt es eine Möglichkeit, den Pfad programmgesteuert zu den Programmdateien x86 zurückzugeben, ohne "C:\Programme (x86)" zu verkabeln?

146

Die folgende Funktion gibt das x86-Program Files-Verzeichnis in allen drei Windows-Konfigurationen zurück:

  • 32 Bit Windows
  • 32-Bit-Programm, das unter 64-Bit-Windows ausgeführt wird
  • 64-Bit-Programm, das auf 64-Bit-Fenstern ausgeführt wird

static string ProgramFilesx86()
{
    if( 8 == IntPtr.Size 
        || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))
    {
        return Environment.GetEnvironmentVariable("ProgramFiles(x86)");
    }

    return Environment.GetEnvironmentVariable("ProgramFiles");
}
226
JaredPar

Wenn Sie .NET 4 verwenden, gibt es eine spezielle Ordneraufzählung ProgramFilesX86 :

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
124
Nathan
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
42
Carl Hörberg

Beachten Sie jedoch, dass die Umgebungsvariable ProgramFiles(x86) nur verfügbar ist, wenn Ihre Anwendung 64-Bit ausführt.

Wenn Ihre Anwendung 32-Bit ausführt, können Sie einfach die Umgebungsvariable ProgramFiles verwenden, deren Wert tatsächlich "Programme (x86)" lautet.

14
chadmyers

Eine Möglichkeit wäre, nach der Umgebungsvariablen "ProgramFiles (x86)" zu suchen:

String x86folder = Environment.GetEnvironmentVariable("ProgramFiles(x86)");
9
tomasr

Ich schreibe eine Anwendung, die sowohl auf der x86- als auch auf der x64-Plattform für Windows 7 ausgeführt werden kann. Wenn Sie die unten stehende Variable abfragen, wird einfach der richtige Ordner für Programmdateien auf einer beliebigen Plattform abgerufen.

Environment.GetEnvironmentVariable("PROGRAMFILES")
5
Samir

Einzeilig mit der neuen Methode in .NET. Gibt immer den Ordner "x86-Programmdateien" zurück.

Environment.Is64BitOperatingSystem ? Environment.GetEnvironmentVariable("ProgramFiles(x86)") : Environment.GetEnvironmentVariable("ProgramFiles"))

0
Red John