Как получить правильный путь к system32 или SysWOW64? - PullRequest
4 голосов
/ 22 июня 2010

У меня есть 32-битный процесс, который может работать в 32-битной или 64-битной Windows. Поэтому, естественно, если процесс попытается получить доступ к файлу c:\windows\system32\file.ext, он будет перенаправлен на c:\windows\SysWOW64\file.ext. Пока все хорошо - я не хочу отключать перенаправление.

Моя проблема в том, что мой процесс на самом деле не обращается к файлу - вместо этого он просто берет его путь и записывает его в текстовый файл , и я хочу, чтобы этот текстовый файл читать SysWOW64 в 64-битной системе и system32 в 32-битной системе. Как я могу это сделать?

Ответы [ 3 ]

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

Следующий код вернет правильный системный каталог (system32 \ syswow64):

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

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

На x86 вы получите% windir% \ System32 На X64 вы получите% windir% \ SysWow64

Надеюсь, это полезно

4 голосов
/ 23 июня 2010

если я правильно понял, вы можете использовать SHGetSpecialFolderPath , передав CSIDL_SYSTEMX86 параметру csidl. Документация для valid csidl гласит, что 32-битный процесс получит:

  • % windir% \ system32 в 32-битной ОС
  • % windir% \ syswow64 в 64-битной ОС

С наилучшими пожеланиями

0 голосов
/ 11 января 2013

System32 C: \ Windows \ System32 Системная папка Windows (системный каталог) для 64-разрядных файлов SysWOW64 C: \ Windows \ SysWOW64 Системная папка Windows (системная папка) для 32-разрядных файлов Program Files C: \ Program Files Папка для64-битные программные файлы Program Files (x86) C: \ Program Files (x86) Папка для 32-битных программных файлов

...