Войти

Показать полную графическую версию : [решено] отключение файла подкачки


super_bitard
16-03-2011, 21:48
Как отключить файл подкачки?
Disablepagingexecutive не работает. После ребута, в GUI так и остаются цифры о размере файла подкачки, pagefile.sys никуда не исчезает.

Iska
16-03-2011, 22:46
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 сам файл тоже удаляется)

Iska
17-03-2011, 21:42
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

seriych
18-03-2011, 00:01
Я опять чего-то непонимаю?
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v PagingFiles /t REG_MULTI_SZ /d "\0" /f
В GUI исчезает, в винде после перезагрузки пропадает... Что я делаю не так?

Iska
18-03-2011, 00:16
seriych, если вопрос ко мне — то я банально не в курсе.

Если Вам не сложно — проверьте, пожалуйста — не делает ли скрипт опосредованно той же настройки в реестре (вероятнее всего так оно и есть)?

seriych
18-03-2011, 00:25
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, система же как-то этот файл удаляет?

seriych
18-03-2011, 11:44
super_bitard,
Она его тоже только после перезагрузки удаляет вроде. Так что нужен только первый ключ реестра.
Кстати, файлик не обязан лежать в %systemdrive%, но в данном случае это не имеет значения, за ненадобностью второго ключа.

Iska
18-03-2011, 20:17
Раз в утверждениях обнаружились расхождения — надо выяснять реальное положение вещей.

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

seriych
19-03-2011, 16:24
super_bitard,
Ага, вот и несоответствие. На семерке работаю в основном, на семерке и проверял. Сейчас на XP проверил - подкачка отключается, а файл остается.

Iska
20-03-2011, 20:30
Итак.

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
А подскажите куда это все положить в дистрибутиве!

Elven
02-12-2013, 14:20
в дистрибутиве »
В каком? Если для автоматизации установки виндов то WinPE в помощь, но это уже другая ветка форума.




© OSzone.net 2001-2012