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?
Die folgende Funktion gibt das x86-Program Files
-Verzeichnis in allen drei Windows-Konfigurationen zurück:
static string ProgramFilesx86()
{
if( 8 == IntPtr.Size
|| (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))
{
return Environment.GetEnvironmentVariable("ProgramFiles(x86)");
}
return Environment.GetEnvironmentVariable("ProgramFiles");
}
Wenn Sie .NET 4 verwenden, gibt es eine spezielle Ordneraufzählung ProgramFilesX86 :
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
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.
Eine Möglichkeit wäre, nach der Umgebungsvariablen "ProgramFiles (x86)" zu suchen:
String x86folder = Environment.GetEnvironmentVariable("ProgramFiles(x86)");
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")
Einzeilig mit der neuen Methode in .NET. Gibt immer den Ordner "x86-Programmdateien" zurück.
Environment.Is64BitOperatingSystem ? Environment.GetEnvironmentVariable("ProgramFiles(x86)") : Environment.GetEnvironmentVariable("ProgramFiles"))