В 64-разрядной Windows есть два системных каталога: один содержит 64-разрядные DLL/EXE-файлы и называется "System32", а другой содержит 32-разрядные DLL/EXE-файлы и называется "SysWOW64".
Перенаправление системных путей применяется к значениям определённых параметров, принимающих пути — полный список см. в разделе "Разрядность записи". Пути, начинающиеся с {sys} (или другого значения, расширяющегося до x:\Windows\System32), при необходимости автоматически перезаписываются так, чтобы 64-разрядные записи получали доступ к 64-разрядному системному каталогу, а 32-разрядные записи — к 32-разрядному системному каталогу.
Например, на системе Windows 64-бит в данном случае:
[Files] Source: "MyLibrary.dll"; DestDir: "{sys}"; Flags: 32bit
файл на самом деле устанавливается в SysWOW64 (32-бит), а не в System32 (64-бит). Но вот в таком случае:
[Files] Source: "MyLibrary.dll"; DestDir: "{sys}"; Flags: 64bit
файл устанавливается в System32 (64-бит). Однако в фоновом режиме 32-разрядные установщики обращаются к этой папке под псевдонимом Sysnative (как показано в таблице ниже).
В системах под управлением 32-разрядной версии Windows перезапись не происходит. "SysWOW64" не существует, а псевдоним Sysnative не поддерживается.
В секции [Code] функцию ApplyPathRedirRules можно использовать для программного применения правил перенаправления к строкам, содержащим пути.
Перезапись путей выполняется по следующими правилами:
| Разрядность записи[1] | Разрядность целевого процесса[2] | Производимая замена | Объяснение |
|---|---|---|---|
| 64-бит | 32-бит | System32 → Sysnative | 32-разрядные процессы должны использовать псевдоним Sysnative, чтобы получить доступ к настоящему 64-разрядному каталогу System32. |
| 32-бит | 64-бит | System32 → SysWOW64 |
64-разрядные процессы могут получить доступ к 32-разрядному системному каталогу только через SysWOW64. Все подкаталоги также перенаправляются; исключений нет. |
| 32-бит | 32-бит | System32 → SysWOW64 (за исключением особых случаев) |
В 32-разрядных процессах функция перенаправления
файловой системы WOW64 В некоторых особых случаях это правило отключается, и вместо него выполняется подстановка SysWOW64 → System32. См. ниже описание этого правила. |
| 64-бит | 64-бит | System32 → не изменяется | Каталог System32 является корректным, если запись и целевой процесс являются 64-разрядными. |
| Любая | 32-бит | Только в особых случаях: SysWOW64 → System32 |
Эти правила применяются только в особых случаях. Такими случаями являются:
|
| Любая | 64-бит | Sysnative → System32 |
64-разрядные процессы не могут использовать псевдоним Sysnative; он доступен только в 32-разрядных процессах. Хотя данное правило применяется как к 32-разрядным, так и к 64-разрядным записям, использование псевдонима Sysnative допустимо только в 32-разрядных записях. |
[1] В функции ApplyPathRedirRules параметр Path64Bit определяет "разрядность записи".
[2] "Целевой процесс" — это процесс, который в конечном итоге будет обращаться к преобразованному пути. В большинстве случаев доступ к путям осуществляется самим инсталлятором или деинсталлятором, поэтому разрядность целевого процесса совпадает с разрядностью программы установки и программы удаления (задаётся директивой SetupArchitecture).