J'utilise:
FileInfo(
System.Environment.GetFolderPath(
System.Environment.SpecialFolder.ProgramFiles)
+ @"\MyInstalledApp"
Afin de déterminer si un programme est détecté sur la machine d’un utilisateur (ce n’est pas idéal, mais le programme que je recherche est un bon vieux logiciel d’une application MS-DOS et je ne pouvais pas penser à une autre méthode).
Sur Windows XP et les versions 32 bits de Windows Vista, cela fonctionne correctement. Cependant, sous x64 Windows Vista, le code renvoie le dossier x64 Program Files, alors que l'application est installée dans Program Files x86. Existe-t-il un moyen de renvoyer par programmation le chemin d'accès à Program Files x86 sans câblage "C:\Program Files (x86)"?
La fonction ci-dessous renvoie le répertoire x86 Program Files
dans les trois configurations Windows suivantes:
static string ProgramFilesx86()
{
if( 8 == IntPtr.Size
|| (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))
{
return Environment.GetEnvironmentVariable("ProgramFiles(x86)");
}
return Environment.GetEnvironmentVariable("ProgramFiles");
}
Si vous utilisez .NET 4, il existe une énumération de dossiers spéciale ProgramFilesX86 :
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
Notez cependant que la variable d'environnement ProgramFiles(x86)
n'est disponible que si votre application exécute une version 64 bits.
Si votre application exécute 32 bits, vous pouvez simplement utiliser la variable d'environnement ProgramFiles
dont la valeur sera réellement "Program Files (x86)".
Une solution consiste à rechercher la variable d’environnement "ProgramFiles (x86)":
String x86folder = Environment.GetEnvironmentVariable("ProgramFiles(x86)");
J'écris une application qui peut fonctionner sur les plates-formes x86 et x64 pour Windows 7 et l'interrogation de la variable ci-dessous extrait simplement le chemin de dossier des fichiers du programme approprié sur n'importe quelle plate-forme.
Environment.GetEnvironmentVariable("PROGRAMFILES")