Używam:
FileInfo(
System.Environment.GetFolderPath(
System.Environment.SpecialFolder.ProgramFiles)
+ @"\MyInstalledApp"
W celu ustalenia, czy program został wykryty na komputerze użytkownika (nie jest to idealne rozwiązanie, ale program, którego szukam, jest starym, starym kludge aplikacji MS-DOS i nie mogłem wymyślić innej metody).
W systemie Windows XP i 32-bitowych wersjach systemu Windows Vista działa to dobrze. Jednak na x64 Windows Vista kod zwraca folder Program Files x64, podczas gdy aplikacja jest instalowana w Program Files x86. Czy istnieje sposób na programowe zwrócenie ścieżki do Program Files x86 bez okablowania „C: \ Program Files (x86)”?
Odpowiedzi:
Poniższa funkcja zwróci
Program Files
katalog x86 we wszystkich trzech konfiguracjach systemu Windows:źródło
Environment.Is64BitOperatingSystem
lubEnvironment.Is64BitProcess
?Jeśli używasz platformy .NET 4, istnieje specjalne wyliczanie folderów ProgramFilesX86 :
źródło
źródło
Należy jednak pamiętać, że
ProgramFiles(x86)
zmienna środowiskowa jest dostępna tylko wtedy, gdy aplikacja działa w wersji 64-bitowej.Jeśli Twoja aplikacja działa w wersji 32-bitowej, możesz po prostu użyć
ProgramFiles
zmiennej środowiskowej, której wartością będzie faktycznie „Program Files (x86)”.źródło
Jednym ze sposobów byłoby poszukanie zmiennej środowiskowej „ProgramFiles (x86)”:
źródło
Piszę aplikację, która może działać zarówno na platformie x86, jak i x64 dla Windows 7 i odpytywanie poniższej zmiennej po prostu pobiera właściwą ścieżkę folderu plików programu na dowolnej platformie.
źródło
Jedna linijka przy użyciu nowej metody w .NET. Zawsze zwróci folder Program Files x86.
Environment.Is64BitOperatingSystem ? Environment.GetEnvironmentVariable("ProgramFiles(x86)") : Environment.GetEnvironmentVariable("ProgramFiles"))
źródło
Kod C #:
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
Wynik:
C: \ Pliki programów (x86)
Uwaga:
Musimy powiedzieć kompilatorowi, aby nie preferował określonej platformy kompilacji.
Powód:
źródło