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:
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