Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] отключение файла подкачки (http://forum.oszone.net/showthread.php?t=202204)

super_bitard 16-03-2011 21:48 1636600

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

Iska 16-03-2011 22:46 1636676

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 1637341

Работает, и даже файл подкачки стал удалаямым, но вручную.

Bat-вариант бы, с автоматическим удалением pagefile.sys (ведь при ручном отключений через GUI сам файл тоже удаляется)

Iska 17-03-2011 21:42 1637419

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 1637540

Я опять чего-то непонимаю?
Код:

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 1637554

seriych, если вопрос ко мне — то я банально не в курсе.

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

seriych 18-03-2011 00:25 1637556

Iska,
Реестр правит, на удаление файла ругается. После перезагрузки должна удалить сама винда. Я просто этот ключик реестра применяю уже года полтора. А после перезагрузки выставляю нужный размер.

super_bitard 18-03-2011 09:48 1637740

Действительно 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 1637830

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

Iska 18-03-2011 20:17 1638228

Раз в утверждениях обнаружились расхождения — надо выяснять реальное положение вещей.

super_bitard, коль Вы заказчик — то Вам и пробовать.

1. Задайте «ручками» в GUI настройки виртуальной памяти, задав файл подкачки, например, для диска «C:». Перегрузитесь.
2. Удалите «ручками» в GUI использование виртуальной памяти, удалив все файл подкачки для всех дисков. Перегрузитесь.
3. Проверьте, удалился ли файл подкачки на диске «C:». Отпишитесь по результатам.

4. Задайте «ручками» в GUI настройки виртуальной памяти, задав файл подкачки, например, для диска «C:». Перегрузитесь.
5. Опробуйте скрипт из #2. Перегрузитесь.
6. Проверьте, удалился ли файл подкачки на диске «C:». Отпишитесь по результатам.

7. Задайте «ручками» в GUI настройки виртуальной памяти, задав файл подкачки, например, для диска «C:». Перегрузитесь.
8. Опробуйте команду из #5. Перегрузитесь.
9. Проверьте, удалился ли файл подкачки на диске «C:». Отпишитесь по результатам.

Дополнительно укажите Вашу ОС и Service Pack. По отрицательным результатам (по пунктам 6 и 9) можно будет дописать удаление файла подкачки после перезагрузки.

super_bitard 19-03-2011 11:42 1638542

Вообще-то изначально все так и проверял

проверил еще раз как вы хотели:
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 1638761

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

Iska 20-03-2011 20:30 1639620

Итак.

1. При изменении параметров размера файла подкачки для определённого диска до нуля посредством интерфейса операционной системы — он удаляется после перезагрузки операционной системы.

2. При этом используется стандартный механизм операционной системы PendingFileRenameOperations посредством вызова не менее стандартной функции WinAPI MoveFileEx с соответствующим параметром:
Цитата:

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 этого делать не рекомендует);
б) мы можем воспользоваться для тех же целей внешней утилитой «MoveFile» из комплекта: PendMoves v1.1 and MoveFile v1.0 (которая фактически делает то же самое);
в) наконец, нам ничто не мешает банально назначить удаление необходимых файлов «pagefile.sys» вручную при загрузке системы любым способом:
* скриптом из #2, соответствующим образом поправив его;
* командой из #11, добавив необходимый в этом случае параметр «/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 и выложить — там данной проблемы не будет, поскольку скрипт знает на каких разделах он отключает файлы подкачки. В случае же простого применения скрипта из #5 — данная информация теряется (но, получить её так же можно, например, предварительным чтением данного параметра реестра с последующим разбором).

Ну, и, я ещё не смотрел идущий в комплекте «C:\WINDOWS\system32\pagefileconfig.vbs» — решается ли там данная проблема, и, если решается — то как.

super_bitard 21-03-2011 13:12 1640072

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 2264069

А подскажите куда это все положить в дистрибутиве!

Elven 02-12-2013 14:20 2265432

Цитата:

Цитата Waldewan
в дистрибутиве »

В каком? Если для автоматизации установки виндов то WinPE в помощь, но это уже другая ветка форума.


Время: 14:20.

Время: 14:20.
© OSzone.net 2001-