Próbuję skopiować plik do C: \ windows \ system32, wywołując CopyFileA - debugowanie pokazuje, że rzeczywiście ciąg "C: \ windows \ system32 \ filename" jest wysyłany do CopyFileA, ale mój plik jest kopiowany do "C : \ windows \ system32 \ sysWOW64 \ filename "zamiast tego. Czy ktoś wie, dlaczego tak się dzieje?Dlaczego kopiowanie do systemu system32 automatycznie kopiuje do sysWOW64?
Odpowiedz
W 64-bitowych systemach Windows system Windows wykonuje przekierowanie systemu plików dla procesów 32-bitowych. Aby wyłączyć, zadzwoń pod numer Wow64DisableWow64FsRedirection Aby aplikacja działała także w 32-bitowym systemie Windows XP, Wow64DisableWow64FsRedirection musi być dynamicznie połączona w czasie wykonywania. Oto kod używam:
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
}
Innym rozwiązaniem jest oczywiście zbudowanie aplikacji w wersji 64-bitowej. Co jest lepsze, zależy od kontekstu. –
Wystarczy, jeśli chcesz sprawdzić system operacyjny, a następnie sprawdzić i uzyskać dostęp do system32 folder jest tak:
string os = Environment.GetEnvironmentVariable("WINDIR") + "\\SysWOW64";
if (Directory.Exists(os))
{
destinationDir = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "sysnative\\");
}
Przez to można skopiować plik folder system32.
Enjoy: Ali Raza
to rozwiązanie wydaje się lepsze dla mnie: kredytu 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. Pobieranie pliku skopiowanego do SysWOW64 zamiast System32
- 2. Kopiowanie JSON kopiuje tylko połowę JSON
- 3. Wyłącz automatyczne kopiowanie Intellij do schowka
- 4. Kopiowanie plików z systemu Windows do podsystemu Ubuntu
- 5. Python tablice są automatycznie kopiuje siebie
- 6. Dlaczego kompilacja sbt nie kopiuje niezarządzanych zasobów do ścieżki klas?
- 7. Dlaczego svn diff czasami kopiuje pliki robocze do pliku tymczasowego?
- 8. Dlaczego Collections.swap kopiuje listę wejściową?
- 9. kopiowanie katalogu z systemu lokalnego do kodu Javy hdfs
- 10. Kto kopiuje plik app.config do pliku app.exe.config?
- 11. Kopiowanie NSMutableArray do innego
- 12. Kopiowanie obiektu AJAX JSON do istniejącego obiektu
- 13. Kopiowanie plików do biblioteki dokumentów w SharePoint
- 14. Android: programowo kopiuje apk do/system/app
- 15. Dlaczego std :: async kopiuje jego const & arguments?
- 16. Kopiowanie odniesienia do wskaźnika lub według wartości
- 17. Kopiowanie z BitmapSource do WritableBitmap
- 18. DataGridView: Kopiowanie zakończone do schowka
- 19. Na click - kopiowanie do schowka
- 20. Schowek Kopiowanie obiektów do iz
- 21. Dlaczego inicjalizacja wektorowa tworzy i kopiuje?
- 22. Kopiowanie ciągu znaków z argv do tablicy char w C
- 23. System.IO.File.Exists (@ "C: \ Windows \ System32 \ SnippingTool.exe") zwraca fałsz
- 24. Wprowadź do raw_input automatycznie
- 25. Zatrzymaj Visual Studio Kopiowanie bazy danych MDF do bin
- 26. Kopiowanie TIMESTAMP do DATETIME na MySQL Hibernate
- 27. Przeglądarka systemu Android automatycznie zmienia rozmiar tekstu
- 28. Uzyskiwanie pełnej ścieżki do usługi systemu Windows
- 29. Kopiowanie jednego strumienia std do innego efektywnie
- 30. Dlaczego `noinspection SimplifiableIfStatement` automatycznie dodany do działalności utworzonej przez kreatora
1. Prawdopodobnie nie powinieneś kopiować plików. 2. Prawdopodobnie jest to przekierowanie dla aplikacji 32-bitowych, aby zapobiec 32-bitowym bibliotekom DLL z 64-bitowego systemu32. –