Показать полную графическую версию : [решено] отключение файла подкачки
super_bitard
16-03-2011, 21:48
Как отключить файл подкачки?
Disablepagingexecutive не работает. После ребута, в GUI так и остаются цифры о размере файла подкачки, pagefile.sys никуда не исчезает.
VBScript:
Option Explicit
Dim strComputer
Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx
strComputer = "."
Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
objSWbemServicesEx.Security_.Privileges.AddAsString "SeCreatePagefilePrivilege", True
For Each objSWbemObjectEx In objSWbemServicesEx.InstancesOf("Win32_ComputerSystem")
With objSWbemObjectEx
' Раскомментировать для Vista и выше:
'.AutomaticManagedPagefile = False
'.Put_
End With
Next
For Each objSWbemObjectEx In objSWbemServicesEx.InstancesOf("Win32_PageFileSetting")
objSWbemObjectEx.Delete_
Next
Set objSWbemObjectEx = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator = Nothing
WScript.Quit 0
А также на XP есть «pagefileconfig.vbs»:
C:\WINDOWS\system32\pagefileconfig.vbs /?
super_bitard
17-03-2011, 20:41
Работает, и даже файл подкачки стал удалаямым, но вручную.
Bat-вариант бы, с автоматическим удалением pagefile.sys (ведь при ручном отключений через GUI сам файл тоже удаляется)
super_bitard, этого не было в ТЗ. Ну, так добавьте:
Option Explicit
Dim strComputer
Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx
strComputer = "."
Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
objSWbemServicesEx.Security_.Privileges.AddAsString "SeCreatePagefilePrivilege", True
For Each objSWbemObjectEx In objSWbemServicesEx.InstancesOf("Win32_ComputerSystem")
With objSWbemObjectEx
' Раскомментировать для Vista и выше:
'.AutomaticManagedPagefile = False
'.Put_
End With
Next
For Each objSWbemObjectEx In objSWbemServicesEx.InstancesOf("Win32_PageFileSetting")
objSWbemObjectEx.Delete_
If objSWbemServicesEx.Get("CIM_DataFile='" & objSWbemObjectEx.Name & "'").Delete() <> 0 Then
WScript.Echo "Can't delete [" & Replace(objSWbemObjectEx.Name, "\\", "\") & "]"
End If
Next
Set objSWbemObjectEx = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator = Nothing
WScript.Quit 0
Я опять чего-то непонимаю?
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v PagingFiles /t REG_MULTI_SZ /d "\0" /f
В GUI исчезает, в винде после перезагрузки пропадает... Что я делаю не так?
seriych, если вопрос ко мне — то я банально не в курсе.
Если Вам не сложно — проверьте, пожалуйста — не делает ли скрипт опосредованно той же настройки в реестре (вероятнее всего так оно и есть)?
Iska,
Реестр правит, на удаление файла ругается. После перезагрузки должна удалить сама винда. Я просто этот ключик реестра применяю уже года полтора. А после перезагрузки выставляю нужный размер.
super_bitard
18-03-2011, 09:48
Действительно vbsка ругается что не может удалить pagefile.sys
Так pagefile.sys почему-то тоже не удаляется, а должен:
reg add "hklm\system\currentcontrolset\control\session manager\memory management" /v "pagingfiles" /t reg_multi_sz /d "\0" /f
reg add "hklm\software\microsoft\windows\currentversion\runonce" /V "delete object" /d "cmd /c del /f /q %systemdrive%\pagefile.sys" /f
При ручном отключении через GUI, система же как-то этот файл удаляет?
super_bitard,
Она его тоже только после перезагрузки удаляет вроде. Так что нужен только первый ключ реестра.
Кстати, файлик не обязан лежать в %systemdrive%, но в данном случае это не имеет значения, за ненадобностью второго ключа.
Раз в утверждениях обнаружились расхождения — надо выяснять реальное положение вещей.
super_bitard, коль Вы заказчик — то Вам и пробовать.
1. Задайте «ручками» в GUI настройки виртуальной памяти, задав файл подкачки, например, для диска «C:». Перегрузитесь.
2. Удалите «ручками» в GUI использование виртуальной памяти, удалив все файл подкачки для всех дисков. Перегрузитесь.
3. Проверьте, удалился ли файл подкачки на диске «C:». Отпишитесь по результатам.
4. Задайте «ручками» в GUI настройки виртуальной памяти, задав файл подкачки, например, для диска «C:». Перегрузитесь.
5. Опробуйте скрипт из #2 (http://forum.oszone.net/post-1636676-2.html). Перегрузитесь.
6. Проверьте, удалился ли файл подкачки на диске «C:». Отпишитесь по результатам.
7. Задайте «ручками» в GUI настройки виртуальной памяти, задав файл подкачки, например, для диска «C:». Перегрузитесь.
8. Опробуйте команду из #5 (http://forum.oszone.net/post-1637540-5.html). Перегрузитесь.
9. Проверьте, удалился ли файл подкачки на диске «C:». Отпишитесь по результатам.
Дополнительно укажите Вашу ОС и Service Pack. По отрицательным результатам (по пунктам 6 и 9) можно будет дописать удаление файла подкачки после перезагрузки.
super_bitard
19-03-2011, 11:42
Вообще-то изначально все так и проверял
проверил еще раз как вы хотели:
3.pagefile.sys автоматически удалился сам (можно было не проверять очевидное)
6.pagefile.sys не удалился
9.pagefile.sys не удалился
en_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73974.iso
проверялось на разных компьютерах
выше уже выкладывал скрипт удаляющий после перезагрузки - тоже не работает:
reg add "hklm\software\microsoft\windows\currentversion\runonce" /V "delete object" /d "cmd /c del /f /q %systemdrive%\pagefile.sys" /f
super_bitard,
Ага, вот и несоответствие. На семерке работаю в основном, на семерке и проверял. Сейчас на XP проверил - подкачка отключается, а файл остается.
Итак.
1. При изменении параметров размера файла подкачки для определённого диска до нуля посредством интерфейса операционной системы — он удаляется после перезагрузки операционной системы.
2. При этом используется стандартный механизм операционной системы PendingFileRenameOperations (http://technet.microsoft.com/en-us/library/cc960241.aspx) посредством вызова не менее стандартной функции WinAPI MoveFileEx (http://msdn.microsoft.com/en-us/library/aa365240(v=vs.85).aspx) с соответствующим параметром:
lpNewFileName [in, optional]
The new name of the file or directory on the local computer.
…
If dwFlags specifies MOVEFILE_DELAY_UNTIL_REBOOT and lpNewFileName is NULL, MoveFileEx registers the lpExistingFileName file to be deleted when the system restarts. If lpExistingFileName refers to a directory, the system removes the directory at restart only if the directory is empty.
которая помещает перечень соответствующих файлов «pagefile.sys» в реестр в очередь на замену файлов:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager]
"PendingFileRenameOperations"=hex(7):…
И, при условии, что эта очередь будет успешно прочтена диспетчером сеансов «smss.exe» при загрузке — произойдёт удаление соответствующих файлов «pagefile.sys».
3. Наш случай — удаление файлов «pagefile.sys» программно (после программного отключения виртуальной памяти).
а) теоретически, мы, обладая правами администратора (или от имени учётной записи «LocalSystem»), можем записать туда перечень необходимых нам файлов «pagefile.sys» (хотя Microsoft этого делать не рекомендует (http://technet.microsoft.com/en-us/library/cc960241.aspx));
б) мы можем воспользоваться для тех же целей внешней утилитой «MoveFile» из комплекта: PendMoves v1.1 and MoveFile v1.0 (http://technet.microsoft.com/en-us/sysinternals/bb897556) (которая фактически делает то же самое);
в) наконец, нам ничто не мешает банально назначить удаление необходимых файлов «pagefile.sys» вручную при загрузке системы любым способом:
* скриптом из #2 (http://forum.oszone.net/post-1636676-2.html), соответствующим образом поправив его;
* командой из #11 (http://forum.oszone.net/post-1638542-11.html), добавив необходимый в этом случае параметр «/a:sh»:
reg.exe add "hklm\software\microsoft\windows\currentversion\runonce" /V "delete object" /d "cmd.exe /c del /f /q /a:sh %systemdrive%\pagefile.sys" /f
Минус этого командного файла в том, что он не учитывает, что файлов подкачки могло быть отключено несколько — на разных разделах. Если есть потребность — я могу позже поправить скрипт из #2 (http://forum.oszone.net/post-1636676-2.html) и выложить — там данной проблемы не будет, поскольку скрипт знает на каких разделах он отключает файлы подкачки. В случае же простого применения скрипта из #5 (http://forum.oszone.net/post-1637540-5.html) — данная информация теряется (но, получить её так же можно, например, предварительным чтением данного параметра реестра с последующим разбором).
Ну, и, я ещё не смотрел идущий в комплекте «C:\WINDOWS\system32\pagefileconfig.vbs» — решается ли там данная проблема, и, если решается — то как.
super_bitard
21-03-2011, 13:12
thank you
Теперь все работает:
reg add "hklm\system\currentcontrolset\control\session manager\memory management" /v "pagingfiles" /t reg_multi_sz /d "\0" /f
reg.exe add "hklm\software\microsoft\windows\currentversion\runonce" /V "delete object" /d "cmd.exe /c del /f /q /a:sh %systemdrive%\pagefile.sys" /f
Подправленный vbs-скрипт тоже не помешал бы на всякий случай.
Waldewan
29-11-2013, 22:01
А подскажите куда это все положить в дистрибутиве!
в дистрибутиве »
В каком? Если для автоматизации установки виндов то WinPE в помощь, но это уже другая ветка форума.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.