Estoy tratando de copiar un archivo a C: \ windows \ system32 llamando a CopyFileA - la depuración muestra que de hecho la cadena "C: \ windows \ system32 \ filename" se envía a CopyFileA, pero mi archivo se copia a "C : \ windows \ system32 \ sysWOW64 \ filename "en su lugar. ¿Alguien sabe por qué sucede eso?¿Por qué copiar a system32 automáticamente copia a sysWOW64 en su lugar?
Respuesta
En Windows de 64 bits, Windows redirecciona el sistema de archivos para procesos de 32 bits. Para deshabilitar, llame al Wow64DisableWow64FsRedirection
Para que la aplicación también se ejecute en Windows XP de 32 bits, Wow64DisableWow64FsRedirection debe vincularse dinámicamente en tiempo de ejecución. Este es el código que utilizo:
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
}
Otra solución, por supuesto, es crear su aplicación como de 64 bits. Lo que es preferible depende del contexto. –
simplemente si desea comprobar el sistema operativo y comprobar su valor y acceder al system32 carpeta es como:
string os = Environment.GetEnvironmentVariable("WINDIR") + "\\SysWOW64";
if (Directory.Exists(os))
{
destinationDir = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "sysnative\\");
}
Por ello se puede copiar el archivo en carpeta system32.
disfrutar de: Ali Raza
esta solución parece mejor para mí: crédito para 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. Archivo copiado en SysWOW64 en lugar de System32
- 2. directorio syswow64 mediante aplicación de 32 bits
- 3. pitón - archivo de copia setup.py a cierto lugar
- 4. Al copiar automáticamente agregar URL
- 5. ¿Por qué se llama este constructor de copia en lugar de mover el constructor?
- 6. ¿Por qué puedo copiar unique_ptr?
- 7. tarea de hormiga para copiar el archivo de propiedades a su lugar correspondiente en el directorio de compilación java
- 8. ¿Por qué Ruby usa responder_a? en lugar de responde_ a?
- 9. ¿Por qué Scala aplica los thunk automáticamente, a veces?
- 10. Cómo copiar recursos automáticamente a la carpeta de salida DCU
- 11. Copia NSMutableArray a otro
- 12. ¿Quién copia app.config a app.exe.config?
- 13. ¿Por qué no copia MSBuild como era de esperar?
- 14. Python ordenar matrices paralelas en su lugar?
- 15. ¿Por qué no es aconsejable usar attach() en R, y qué debería usar en su lugar?
- 16. Forma correcta de copiar en profundidad con el constructor de copia en lugar de Object.clone
- 17. ¿Por qué jQuery pasa el objeto ventana a su ámbito
- 18. SVN Copia de troncal a rama, también copia carpeta troncal?
- 19. C#, copia un bool a otro (por ref, no val)
- 20. ¿Por qué debería usar una propiedad implementada automáticamente en lugar de un campo?
- 21. ¿De qué sirve una copia de solo lectura de su repositorio a través de svnsync?
- 22. copiar propiedad y Block_copy (myblock)/[copia myblock]
- 23. Arguments.callee está en desuso - ¿qué debería usarse en su lugar?
- 24. ¿Por qué se llama al constructor de copia en lugar del constructor de conversión?
- 25. Copia de formulario a formulario en jQuery
- 26. ¿Por qué "Copiar si es nuevo" no copia un archivo cuando se actualiza el archivo?
- 27. Mueva su copia de trabajo
- 28. com.sun.faces.enableRestoreView11Compatibility qué uso en su lugar en JSF 1.2
- 29. ¿Por qué copiar elision no funciona con std :: move?
- 30. ¿Por qué `a = a`` nil` en Ruby?
1. Probablemente no deba copiar archivos allí de todos modos. 2. Probablemente sea una redirección para las aplicaciones de 32 bits, para evitar las DLL de 32 bits del sistema32 de 64 bits. –