Решил создать тему по данному вопросу, чтобы как то суммировать имеющуюся информацию и получить ответы на некоторые вопросы.
Если кто то захочет высказать свои соображения по теме вообще, а также поделиться своей практикой (положительной или отрицательной) статья по теме применения способов обхода редиректа - это только приветствуется.
(По терминологии - использую слово редирект так как оно короче русского аналога и к тому же вполне устоявшийся термин в среде программистов) .
Перейдем к нашим 'баранам':
1. Выключать редирект не нужно, если программа открывает файл или папку через стандартный диалог FileSelectFolder или FileOpenDialog. Так ли это?
2. Выключать редирект нужно, если программа испльзует функции для перечисления файлов в папке - например _FileListToArray, FileFindNextFile,FileFindFirstFile и т.д.
Вопрос: корректно ли здесь использовано отключение редиректа.
;Функция редиректа
3. Как проверить существование виртуальной папки Sysnative, если предполагается использовать ее вместо отключения редиректа через WinAPI?
подойдет?
4. Макрос @SystemDir в 64-битной Windows возвращает C:\windows\system32 или C:\windows\SysWOW64 ? (есть ли зависимость от битности скомпилированного скрипта?)
5. В каких еще случаях (для каких функций AutoIT ) может понадобиться отключение редиректа?
Вопрос: нужно ли отключение редиректа здесь:
------------------------------------------------------------------------
...Нда, вот что значит невнимательно смотреть код функций, которые используешь. Оказывается функция
из WinAPIEx.au3, которую я использовал в скрипте, сама редирект отключает и значит 'обертывать' ее дополнительно совершенно точно не требуется. Будем знать ;)
Если кто то захочет высказать свои соображения по теме вообще, а также поделиться своей практикой (положительной или отрицательной) статья по теме применения способов обхода редиректа - это только приветствуется.
(По терминологии - использую слово редирект так как оно короче русского аналога и к тому же вполне устоявшийся термин в среде программистов) .
Перейдем к нашим 'баранам':
1. Выключать редирект не нужно, если программа открывает файл или папку через стандартный диалог FileSelectFolder или FileOpenDialog. Так ли это?
2. Выключать редирект нужно, если программа испльзует функции для перечисления файлов в папке - например _FileListToArray, FileFindNextFile,FileFindFirstFile и т.д.
Вопрос: корректно ли здесь использовано отключение редиректа.
Код:
;=====================================================
If StringInStr($sPath,'system32') Then
;если параметр $DISABLEREDIRECTWOW64 = 1, то используем WinAPI
Wow64Redirection(0,'LoadDllFromFoldersList')
; либо алиас Sysnative
If $DISABLEREDIRECTWOW64=='Sysnative' Then
$sPath=StringReplace($sPath,'system32','Sysnative')
EndIf
EndIf
;=====================================================
$aModuleList = _FileListToArray($sPath, "*.dll")
;=====================================================
; включаем обратно
Wow64Redirection(1,'LoadDllFromFoldersList')
;=====================================================
;Функция редиректа
Код:
Func Wow64Redirection($iRedirect, $sFuncName,$sParam='')
Local $iResult
If $WOW64 And $DISABLEREDIRECTWOW64 = 1 Then
$iResult=_WinAPI_Wow64EnableWow64FsRedirection($iRedirect)
If $iResult = 0 Then MsgBox(0,'','Ошибка установки Wow64FsRedirection, param[' & $iRedirect & '],вызов из ' & $sFuncName & ', ' & $sParam)
EndIf
EndFunc
3. Как проверить существование виртуальной папки Sysnative, если предполагается использовать ее вместо отключения редиректа через WinAPI?
подойдет?
4. Макрос @SystemDir в 64-битной Windows возвращает C:\windows\system32 или C:\windows\SysWOW64 ? (есть ли зависимость от битности скомпилированного скрипта?)
5. В каких еще случаях (для каких функций AutoIT ) может понадобиться отключение редиректа?
Вопрос: нужно ли отключение редиректа здесь:
Код:
Func OpenFileFolder($sPath)
If FileExists(@WindowsDir & "\explorer.exe") Or FileExists(@SystemDir & "\explorer.exe") Then
Run("explorer /select, " & $sPath)
Else
ShellExecute(SplitPath($sPath,1), "", "", "open")
EndIf
EndFunc
------------------------------------------------------------------------
...Нда, вот что значит невнимательно смотреть код функций, которые используешь. Оказывается функция
из WinAPIEx.au3, которую я использовал в скрипте, сама редирект отключает и значит 'обертывать' ее дополнительно совершенно точно не требуется. Будем знать ;)