Comment récupérer le chemin correct de system32 ou SysWOW64?

J’ai un processus 32 bits qui peut s’exécuter sous Windows 32 bits ou 64 bits. Donc, naturellement, si le processus essayait d’accéder au fichier c:\windows\system32\file.ext , il serait redirigé vers c:\windows\SysWOW64\file.ext . Jusqu’ici tout va bien – je ne veux pas désactiver la redirection.

Mon problème est que mon processus n’accède pas réellement au fichier – au lieu de cela, il prend juste son chemin et l’ écrit dans un fichier texte , et je veux que ce fichier texte lise SysWOW64 sur un système 64 bits et system32 sur un 32- système de bits. Comment puis je faire ça?

Le code suivant renverra le répertoire système correct (system32 \ syswow64):

 [DllImport("shell32.dll")] public static extern bool SHGetSpecialFolderPath( IntPtr hwndOwner, [Out]SsortingngBuilder lpszPath, int nFolder, bool fCreate ); public static ssortingng GetSystemDirectory() { SsortingngBuilder path = new SsortingngBuilder(260); NativeMethods.SHGetSpecialFolderPath(IntPtr.Zero, path, 0x0029, false); return path.ToSsortingng(); } 

Sur x86, vous obtiendrez% windir% \ System32 Sur X64 vous aurez% windir% \ SysWow64

J’espère que c’est utile

Si j’ai bien compris, vous pouvez utiliser SHGetSpecialFolderPath en transmettant CSIDL_SYSTEMX86 au paramètre csidl. La documentation des csidl valides indique qu’un processus 32 bits aura:

  • % windir% \ system32 sur un OS 32 bits
  • % windir% \ syswow64 sur un OS 64 bits

Meilleures salutations

System32 C: \ Windows \ System32 Dossier Système Windows (répertoire système) pour les fichiers 64 bits SysWOW64 C: \ Windows \ SysWOW64 Dossier Système Windows (répertoire système) pour les fichiers 32 bits Program Files C: \ Dossier Program Files pour 64 bits fichiers programme Program Files (x86) C: \ Program Files (x86) Dossier pour fichiers programme 32 bits