Получение каталога syswow64 с использованием 32-битного приложения - PullRequest
13 голосов
/ 22 августа 2010

Я пытаюсь найти файл в системном каталоге. Проблема в том, что при использовании

Environment.SystemDirectory

На компьютере x64 я по-прежнему получаю каталог System32 вместо каталога Systemwow64.

Мне нужно получить каталог «System32» на компьютерах x86 и каталог «SystemWow64» на x64

Есть идеи?

EDIT: Чтобы найти SysWow64 я использую «GetSystemWow64Directory». (дополнительная информация здесь: pinvoke Обратите внимание, что на машинах, отличных от x64, результат равен '0'. Надеюсь, это кому-нибудь поможет

Ответы [ 4 ]

13 голосов
/ 22 августа 2010

Используйте Environment.GetFolderPath(Environment.SpecialFolder.SystemX86) вместо.

9 голосов
/ 02 сентября 2010

Использование функции SHGetSpecialFolderPath:

[DllImport("shell32.dll")]
public static extern bool SHGetSpecialFolderPath(IntPtr hwndOwner, [Out]StringBuilder lpszPath, int nFolder, bool fCreate);

string GetSystemDirectory()
{
    StringBuilder path = new StringBuilder(260);
    SHGetSpecialFolderPath(IntPtr.Zero,path,0x0029,false);
    return path.ToString()
}

Возвращает System32 на x86 и SysWow64 на x64

3 голосов
/ 22 августа 2010

Что ваша 32-битная программа считает System32 действительно SysWOW64 - не кодируйте 32-битные приложения, чтобы иметь какие-либо явные знания о 64-битных, это то, что перенаправление WOW64 для

0 голосов
/ 27 апреля 2014

У меня была такая же проблема. Решением является установка «цели платформы» как x86 вместо AnyCPU или x64 в свойствах проекта в Visual Studio. В этом случае путь будет "C:\Windows\system32", но на самом деле он перенаправляется на "C:\Windows\SysWOW64". Вы можете проверить это, поместив любой файл в папку "C: \ Windows \ SysWOW64", а затем с помощью команды File.Exists проверить, найден ли файл. в этой папке:

File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), sFileName));

Или

File.Exists(Path.Combine(Environment.SystemDirectory, sFileName));

enter image description here

...