2010-05-11 7 views
11

Estoy intentando escribir una C#/NET que optimiza los discos duros de nuestras estaciones de trabajo XPEn Windows XP, mediante programación set archivo de paginación a "Sin archivo de paginación" en la única unidad c:

  1. Conjunto de archivo de paginación. a "Sin archivo de paginación"
  2. reinicio
  3. ejecutar una utilidad de desfragmentación para optimizar los datos y aplicaciones
  4. Crear un archivo contiguo página
  5. Reiniciar, PageDefrag correr de Sysinternals

Realmente estoy luchando con el n. ° 1. Elimino la siguiente clave: SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Administración de memoria \ PagingFiles

Al reiniciar, el Panel de control del sistema muestra "Sin archivo de página", pero c: \ pagefile.sys todavía existe y está en uso por el proceso de SISTEMA así que no puedo eliminarlo y no puedo optimizar HD. Traté de usar PendingFileRenamingOperations y también las bombas. Intenté usar WMI: Win32_PageFileSetting, pero eso solo le permite establecer tamaños (no cero, por defecto es de 2MB).

Por supuesto, si hago los pasos manuales descritos anteriormente, funciona.

Creo que necesito una llamada API para que esto suceda.

+0

Parece que el archivo de paginación está en uso para un ciclo de inicio más. En el segundo reinicio, el archivo ya no está en uso. Esto es para Windows 7. – usr

Respuesta

4

Mira Delete o DeleteEx métodos de la clase Win32_PageFile:

La clase ya no se utiliza, pero ya que estamos hablando de Windows XP, tal vez no está desfasada a continuación.

0

Puede modificar el registro para cambiar la configuración del archivo de paginación.

Se almacenan en la siguiente clave del registro:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management 

PagingFiles valor contiene valores en el 'PageFileLocation MinSize MaxSize' formato (es decir, 'C:\pagefile.sys 1024 2048') - se puede encontrar más sobre esto en this artículo.

+0

En realidad, estoy tratando de deshacerme del archivo de paginación (temporalmente). Sé que hay una llamada WMI que hace lo que dices, pero XP dice que es un no no (estableciendo un mínimo y máximo en cero) y lo reinicia en 2MB. – NBPC77

+0

@ NBPC77: Posiblemente, la API restringe la eliminación de todos los archivos de página. No tengo un archivo de paginación en mi sistema (8 GB de RAM es suficiente) y ese valor 'PagingFiles' consiste en dos líneas vacías. – Regent

1

Suena como una tontería pero ¿ha intentado usar runas/exigiendo algunos permisos administrativos en su código?

Me he encontrado con rarezas como esta antes donde el código se ejecuta/parece con WMI pero parece que no hace nada porque en algún lugar en la parte posterior de la API 1 no estaba habilitado para la cuenta que ejecuta el código .

Los niveles de confianza a menudo también tienen un impacto.

No puedo pensar en nada más que sea obvio y se destaca.

2

En realidad, el error que cometí fue eliminar la clave de registro.

Lo que tenía que hacer es fijar el valor de cadena múltiple a algo así como

rk.SetValue ("PagingFiles", nueva cadena [] { ""}, RegistryValueType.MultiString)

Buena suerte !