J'essaie de copier un fichier dans C: \ windows \ system32 en appelant CopyFileA - le débogage montre qu'effectivement la chaîne "C: \ windows \ system32 \ filename" est envoyée à CopyFileA, mais mon fichier est copié dans "C : \ windows \ system32 \ sysWOW64 \ filename "à la place. Est-ce que quelqu'un sait pourquoi cela arrive-t-il?Pourquoi la copie sur system32 est-elle automatiquement copiée dans sysWOW64?
Répondre
Sur Windows 64 bits, Windows effectue la redirection du système de fichiers pour les processus 32 bits. Pour désactiver, appelez Wow64DisableWow64FsRedirection
Pour que l'application s'exécute également sur Windows XP 32 bits, Wow64DisableWow64FsRedirection doit être lié dynamiquement au moment de l'exécution. Voici le code que j'utilise:
BOOL DisableWow64FsRedirection(PVOID* OldValue)
{
#ifdef WIN64
UNREFERENCED_PARAMETER(OldValue);
return TRUE;
#else
typedef BOOL (WINAPI * LPWOW64DISABLEWOW64FSREDIRECTION)(PVOID *);
LPWOW64DISABLEWOW64FSREDIRECTION fnWow64DisableWow64FsRedirection;
HMODULE kernelMod;
BOOL success = TRUE;
kernelMod = GetModuleHandleW(L"kernel32");
if (kernelMod)
{
fnWow64DisableWow64FsRedirection = (LPWOW64DISABLEWOW64FSREDIRECTION)GetProcAddress(kernelMod, "Wow64DisableWow64FsRedirection");
if (fnWow64DisableWow64FsRedirection)
success = fnWow64DisableWow64FsRedirection(OldValue);
}
return success;
#endif
}
BOOL RevertWow64FsRedirection(PVOID OldValue)
{
#ifdef WIN64
UNREFERENCED_PARAMETER(OldValue);
return TRUE;
#else
typedef BOOL (WINAPI * LPWOW64REVERTWOW64FSREDIRECTION)(PVOID);
LPWOW64REVERTWOW64FSREDIRECTION fnWow64RevertWow64FsRedirection;
HMODULE kernelMod;
BOOL success = TRUE;
kernelMod = GetModuleHandleW(L"kernel32");
if (kernelMod)
{
fnWow64RevertWow64FsRedirection = (LPWOW64REVERTWOW64FSREDIRECTION)GetProcAddress(kernelMod, "Wow64RevertWow64FsRedirection");
if (fnWow64RevertWow64FsRedirection)
success = fnWow64RevertWow64FsRedirection(OldValue);
}
return success;
#endif
}
Une autre solution, bien sûr, est de construire votre application en 64 bits. Ce qui est préférable dépend du contexte. –
simplement si vous voulez vérifier le système d'exploitation puis vérifiez et accéder au system32 dossier est comme:
string os = Environment.GetEnvironmentVariable("WINDIR") + "\\SysWOW64";
if (Directory.Exists(os))
{
destinationDir = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "sysnative\\");
}
En cela, vous pouvez copier le fichier dossier system32.
Enjoy: Ali Raza
cette solution semble mieux pour moi: crédit à Bevan Collins.
BOOL changeWow64Redirection(PVOID& param, BOOL toDisable = true)
{
#ifdef WIN64
UNREFERENCED_PARAMETER(OldValue);
return TRUE;
#else
typedef BOOL (WINAPI * LPWOW64CHANGEWOW64FSREDIRECTION)(PVOID *);
LPWOW64CHANGEWOW64FSREDIRECTION fnWow64ChangeWow64FsRedirection;
HMODULE kernelMod;
BOOL success = FALSE;
kernelMod = GetModuleHandle(_T("kernel32"));
if (kernelMod)
{
if (toDisable)
fnWow64ChangeWow64FsRedirection = (LPWOW64CHANGEWOW64FSREDIRECTION)GetProcAddress(kernelMod, "Wow64DisableWow64FsRedirection");
else
fnWow64ChangeWow64FsRedirection = (LPWOW64CHANGEWOW64FSREDIRECTION)GetProcAddress(kernelMod, "Wow64RevertWow64FsRedirection");
if (fnWow64ChangeWow64FsRedirection)
success = fnWow64ChangeWow64FsRedirection(¶m);
}
return success;
#endif //WIN64
}
- 1. Copie de fichier dans SysWOW64 au lieu de System32
- 2. InstallShield s'installe sur SysWOW64 et pas sur System32
- 3. Wix essayant d'installer un script ps1 à la fois le répertoire system32 et syswow64
- 4. Dossier System32 dans Windows 7
- 5. Pourquoi la bibliothèque C# est introuvable dans le dossier system32?
- 6. Excel 2010: Faites défiler automatiquement vers la cellule suivante lorsque la cellule est copiée
- 7. Obtention du répertoire syswow64 à l'aide de l'application 32 bits
- 8. Pourquoi l'initialisation vectorielle est-elle construite et copiée?
- 9. débordement dans la version copiée de la liste chaînée
- 10. Comment puis-je installer des fichiers dans le dossier System32 sur une plate-forme 64Bit
- 11. ipconfig sur Windows 7 en dehors de system32
- 12. La variable copiée modifie l'original?
- 13. Sur copie masquer textarea (JQuery)
- 14. xpages pourquoi ma valeur de champ n'est pas copiée correctement
- 15. Pourquoi cette galerie JavaScript n'est-elle pas copiée correctement?
- 16. La bibliothèque référencée n'est pas copiée
- 17. Python: éléments de la liste d'échange dans une liste copiée sans affecter la liste d'origine
- 18. Impossible d'écrire la valeur SysWow64 pour enregistrer avec vbscript pour Screensaver
- 19. Retourne la liste copiée et multipliée
- 20. Pourquoi NSString stringWithString renvoie-t-il le pointeur sur une chaîne copiée?
- 21. Ruby Dir.foreach dans System32 manque fichiers/File.exists? renvoie false pour les fichiers existants
- 22. mysql insérer dans la copie un enregistrement
- 23. Base de données non copiée dans Android 2.3.3
- 24. Pourquoi l'initialisation de la copie est-elle telle qu'elle est? Pourquoi exiger le constructeur de copie?
- 25. Ruby - Aucun fichier ou répertoire dans system32
- 26. Comment obtenir une image copiée dans iOS?
- 27. Vérification de la signature numérique dans le dossier system32/drivers
- 28. La DLL MySql.Data n'est pas copiée dans le répertoire de sortie
- 29. java.exe dans le dossier system32 pas toujours créé
- 30. Pourquoi la copie d'un objet dans Java ne fonctionne pas?
1. Vous ne devriez probablement pas copier de fichiers de toute façon. 2. C'est probablement une redirection pour les applications 32 bits, pour empêcher les DLL 32 bits de 64 bits system32. –