Цитата Kopejkin:
В общем, не знаю, как правильно пояснить.
Может маленькое видео поможет. »
|
Да, лажа на видео... Но у меня на восьмёрке вроде как всё нормально происходит. Если можно назвать нормальным, явную задержку при перерисовке стола...
Я пробовал разные утилитки, предназначенные специально для рестарта - всё в целом одно и то же - тормоза и визуально ужасно...
Например, :
RestartExplorer ( Author Winaero )
Performs a graceful restart of the Explorer shell in Windows 10, 8, 7 and Vista. Explorer will save your preferences, i.e. icons order on Desktop and then restart.
http://winaero.com/download.php?view.1783
http://www.nirsoft.net/utils/restart_explorer.html
RightClick Restart Explorer
http://www.thewindowsclub.com/right-...o-context-menu
Кстати, лучше всех отрабатывает батник, вообщем такой же что я уже тебе давал + организована пинг-задержка :
Цитата:
echo off
mode 72,3
title Explorer Restart - v1.3
if exist TEMP_FILE goto erro_1
echo Security to not open two Explorer Restart>TEMP_FILE
taskkill /F /IM explorer.exe >NUL
echo Explorer Closed, Starting...
ping 127.0.0.1 >NUL
start %systemroot%\explorer.exe
del TEMP_FILE
echo Explorer restarts, wait few seconds for this window closes.
ping 127.0.0.1 >NUL
exit
:erro_1
echo Already have an Explorer Restart In Progress.
ping 127.0.0.1 >NUL
exit
|
На винампе предложили такой код :
Цитата:
!include LogicLib.nsh
!include WinMessages.nsh
Name RestartExplorer
OutFile RestartExplorer.exe
RequestExecutionLevel user
ShowInstDetails show
!macro _IsWindow _a _b _t _f
IsWindow `${_b}` `${_t}` `${_f}`
!macroend
!define IsWindow `"" IsWindow`
!macro RestartExplorer
Push $R0
Push $R1
FindWindow $R0 Shell_TrayWnd
${If} ${IsWindow} $R0
IntOp $R1 ${WM_USER} + 436
System::Call `user32::PostMessage(i R0, i R1, i 0, i 0)`
${For} $R1 1 20
Sleep 1000
FindWindow $R0 Shell_TrayWnd
${IfNot} ${IsWindow} $R0
Exec `"$WINDIR\explorer.exe"`
${Break}
${EndIf}
${Next}
${EndIf}
Pop $R1
Pop $R0
!macroend
Section Main
!insertmacro RestartExplorer
SectionEnd
|
Только всё это - один хрен... Тормоза и визуально не красиво...
(Про не отображение эксплорера плагином, автор пока ничего не сказал...)
Почитав разную инфу про установку-удаление занятых DLL без перезагрузки компа или эксплорера, я пришёл к выводу, что идея эта - очень плохая... Отбирать у Винды, удерживаемый ей файл - всё равно , что отбирать у ребёнка конфету. Крику и слёз не оберёшься...
Лучше отложенного удаления "занятых" файлов, после ближайшей перезагрузки, ничего не придумано... А если и придумано, то держится в великом секрете...
(есть ещё экзотика с манипуляцией помещения файлов в память и чего то там ещё, но это для крутых программеров..)
Ну и ещё используется вариант - подмена исходных файлов на нужные, с переименованием исходных . Это дело известное и похоже, самое эффективное...
Также можно использовать сторонние утилитки типа
inuse.exe или
MoveFile
Цитата:
Программы PendMoves (версия 1.2) и MoveFile (версия 1.01)
Автор: Марк Руссинович (Mark Russinovich)
|
http://technet.microsoft.com/ru-ru/s.../bb897556.aspx