Alex_ST, убрал экспорт разделов реестра. Продвинутые сами смогут разобраться что к чему, а рядовые пользователи только запутаются.
Для тех кто хочет всё сделать не вникая в суть, сохраняем в bat файл с кодировкой 866 (OEM - русская), чтобы сообщения на русском были читаемы, и выполняем с правами администратора. Обратите внимание! есть код удаления файлов *.exd глобально! на системном диске, не вздумайте вместо него указать *.* Если что, то я предупреждал!
[vba]
Код
@echo off
SETLOCAL ::STEP1 cls net.exe session 1>NUL 2>NUL || (echo Этот сценарий требует права администратора. & pause && exit /b 1) echo Завершите работу офисных приложений, т.к. далее завершение будет принудительным! echo. pause taskkill /T /F /IM EXCEL.exe taskkill /T /F /IM WINWORD.exe taskkill /T /F /IM POWERPNT.exe
::STEP2 ::https://support.microsoft.com/en-us/kb/290537 ::https://support.microsoft.com/en-us/kb/3025036 ::Поиск и удаление файлов *.exd глобально! на системном диске %systemdrive% cd \ del /F /Q /S /A:H /A:-H *.exd
::Поиск и удаление файлов *.exd по пути переменных %Temp% и %Tmp% т.к. они могут ссылаться на диск отличный от системного if exist %Temp% cd /d %Temp%&&del /F /Q /S /A:H /A:-H *.exd if exist %Tmp% cd /d %Tmp%&&del /F /Q /S /A:H /A:-H *.exd
::Поиск и удаление файлов *.exd в профиле пользователя, на тот случай если профиль пользователя является перемещаемым и расположен на диске отличном от системного if exist "%APPDATA%\Microsoft\Local" cd /d "%APPDATA%\Microsoft\Local"&&del /F /Q /S /A:H /A:-H *.exd if exist "%APPDATA%\Microsoft\Forms" cd /d "%APPDATA%\Microsoft\Forms"&&del /F /Q /S /A:H /A:-H *.exd if exist "%APPDATA%\Roaming\Microsoft\Forms" cd /d "%APPDATA%\Roaming\Microsoft\Forms"&&del /F /Q /S /A:H /A:-H *.exd if exist "%USERPROFILE%\Local Settings\Temp" cd /d "%USERPROFILE%\Local Settings\Temp"&&del /F /Q /S /A:H /A:-H *.exd
::STEP3 ::Перерегистрация библиотеки FM20.DLL if exist "%windir%\System32\FM20.DLL" "%windir%\System32\regsvr32.exe" /u /s "%windir%\System32\FM20.DLL" if exist "%windir%\SysWOW64\FM20.DLL" "%windir%\SysWOW64\regsvr32.exe" /u /s "%windir%\SysWOW64\FM20.DLL"
if exist "%windir%\System32\FM20.DLL" "%windir%\System32\regsvr32.exe" /s "%windir%\System32\FM20.DLL" if exist "%windir%\SysWOW64\FM20.DLL" "%windir%\SysWOW64\regsvr32.exe" /s "%windir%\SysWOW64\FM20.DLL"
::STEP4 ::https://msdn.microsoft.com/en-us/library/bb688194(v=vs.85).aspx ::Корректировка параметра Compatibility Flags, который отключает запуск элемента управления ActiveX ::Удаление параметра AlternateCLSID, который может присутствовать и перенаправлять на другой CLSID, а значение параметра Compatibility Flags в этом случае не учитывается
set key-01=HKLM\SOFTWARE\Microsoft\Office\Common\COM Compatibility\{D7053240-CE69-11CD-A777-00DD01143C57} set key-02=HKLM\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{D7053240-CE69-11CD-A777-00DD01143C57} set key-03=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\Common\COM Compatibility\{D7053240-CE69-11CD-A777-00DD01143C57} set key-04=HKLM\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\ActiveX Compatibility\{D7053240-CE69-11CD-A777-00DD01143C57}
:end ENDLOCAL echo. echo Работа завершена. echo. pause exit /B
[/vba]
Alex_ST, убрал экспорт разделов реестра. Продвинутые сами смогут разобраться что к чему, а рядовые пользователи только запутаются.
Для тех кто хочет всё сделать не вникая в суть, сохраняем в bat файл с кодировкой 866 (OEM - русская), чтобы сообщения на русском были читаемы, и выполняем с правами администратора. Обратите внимание! есть код удаления файлов *.exd глобально! на системном диске, не вздумайте вместо него указать *.* Если что, то я предупреждал!
[vba]
Код
@echo off
SETLOCAL ::STEP1 cls net.exe session 1>NUL 2>NUL || (echo Этот сценарий требует права администратора. & pause && exit /b 1) echo Завершите работу офисных приложений, т.к. далее завершение будет принудительным! echo. pause taskkill /T /F /IM EXCEL.exe taskkill /T /F /IM WINWORD.exe taskkill /T /F /IM POWERPNT.exe
::STEP2 ::https://support.microsoft.com/en-us/kb/290537 ::https://support.microsoft.com/en-us/kb/3025036 ::Поиск и удаление файлов *.exd глобально! на системном диске %systemdrive% cd \ del /F /Q /S /A:H /A:-H *.exd
::Поиск и удаление файлов *.exd по пути переменных %Temp% и %Tmp% т.к. они могут ссылаться на диск отличный от системного if exist %Temp% cd /d %Temp%&&del /F /Q /S /A:H /A:-H *.exd if exist %Tmp% cd /d %Tmp%&&del /F /Q /S /A:H /A:-H *.exd
::Поиск и удаление файлов *.exd в профиле пользователя, на тот случай если профиль пользователя является перемещаемым и расположен на диске отличном от системного if exist "%APPDATA%\Microsoft\Local" cd /d "%APPDATA%\Microsoft\Local"&&del /F /Q /S /A:H /A:-H *.exd if exist "%APPDATA%\Microsoft\Forms" cd /d "%APPDATA%\Microsoft\Forms"&&del /F /Q /S /A:H /A:-H *.exd if exist "%APPDATA%\Roaming\Microsoft\Forms" cd /d "%APPDATA%\Roaming\Microsoft\Forms"&&del /F /Q /S /A:H /A:-H *.exd if exist "%USERPROFILE%\Local Settings\Temp" cd /d "%USERPROFILE%\Local Settings\Temp"&&del /F /Q /S /A:H /A:-H *.exd
::STEP3 ::Перерегистрация библиотеки FM20.DLL if exist "%windir%\System32\FM20.DLL" "%windir%\System32\regsvr32.exe" /u /s "%windir%\System32\FM20.DLL" if exist "%windir%\SysWOW64\FM20.DLL" "%windir%\SysWOW64\regsvr32.exe" /u /s "%windir%\SysWOW64\FM20.DLL"
if exist "%windir%\System32\FM20.DLL" "%windir%\System32\regsvr32.exe" /s "%windir%\System32\FM20.DLL" if exist "%windir%\SysWOW64\FM20.DLL" "%windir%\SysWOW64\regsvr32.exe" /s "%windir%\SysWOW64\FM20.DLL"
::STEP4 ::https://msdn.microsoft.com/en-us/library/bb688194(v=vs.85).aspx ::Корректировка параметра Compatibility Flags, который отключает запуск элемента управления ActiveX ::Удаление параметра AlternateCLSID, который может присутствовать и перенаправлять на другой CLSID, а значение параметра Compatibility Flags в этом случае не учитывается
set key-01=HKLM\SOFTWARE\Microsoft\Office\Common\COM Compatibility\{D7053240-CE69-11CD-A777-00DD01143C57} set key-02=HKLM\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{D7053240-CE69-11CD-A777-00DD01143C57} set key-03=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\Common\COM Compatibility\{D7053240-CE69-11CD-A777-00DD01143C57} set key-04=HKLM\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\ActiveX Compatibility\{D7053240-CE69-11CD-A777-00DD01143C57}
Сегодня вдруг опять наступил на старые грабли НО хитро: Textbox создавались и работали, а Combobox Check CommandButton -нет и при этом Excel не ругался при открытии таких файлоа, а просто они тупо не лоцировались мышкой ни в каком режиме Батник это не исправлял. Воспользовался методом с Process Monitor и обнаружил ещё один раздел реестра, куда Офис лезет при создании элементов: [vba]
[/vba] Заменил это 16-ричное 400 на 800000, как советовал IVAndron. Всё заработало! Ещё раз спасибо! Заслужил плюс в репу однозначно.
Сегодня вдруг опять наступил на старые грабли НО хитро: Textbox создавались и работали, а Combobox Check CommandButton -нет и при этом Excel не ругался при открытии таких файлоа, а просто они тупо не лоцировались мышкой ни в каком режиме Батник это не исправлял. Воспользовался методом с Process Monitor и обнаружил ещё один раздел реестра, куда Офис лезет при создании элементов: [vba]
Также, Compatibility Flags значение 400 меняем на 800000.
Не уверен, что при любом раскладе нужно вносить такие изменения, только в случае если что-то перестало работать, ведь майкрософт таким образом блокирует компоненты исходя из соображений безопасности, а мы получается делаем откат.
Также, Compatibility Flags значение 400 меняем на 800000.
Не уверен, что при любом раскладе нужно вносить такие изменения, только в случае если что-то перестало работать, ведь майкрософт таким образом блокирует компоненты исходя из соображений безопасности, а мы получается делаем откат.IVAndron
IVAndron, ну так и выложил бы свой уже подпиленный должным образом волшебный батник, а за одно мог бы добавить правку и того, что я в предыдущем посте нашёл.
IVAndron, ну так и выложил бы свой уже подпиленный должным образом волшебный батник, а за одно мог бы добавить правку и того, что я в предыдущем посте нашёл.Alex_ST