Reconfigurando, em seguida, excluindo o pagefile.sys obsoleto do C: de uma só vez, usando um script em lote

1

Estou tentando configurar um script automatizado para um instalador do Windows XP. É um script em lote que é executado na primeira inicialização após a instalação e, entre as coisas que estou tentando realizar, está removendo o arquivo de paginação de C: inteiramente e colocando um arquivo de paginação de 16 a 768 MB em D:

Aqui estão as instruções do meu arquivo de lote:

echo === Creating new page file on D: ...
cscript %windir%\system32\pagefileconfig.vbs /create /i 16 /m 768 /vo d: >nul
echo.
echo === Removing old page file from C: ...
cscript %windir%\system32\pagefileconfig.vbs /delete /vo C:
attrib -s -h c:\pagefile.sys
del c:\pagefile.sys

Meu problema é que, embora sejam comandos sensatos, a remoção do arquivo de paginação em C: requer que eu reinicie antes que esses comandos sejam bem-sucedidos.b Ou, em outras palavras - primeiro tenho que criar o arquivo de paginação D:, reinicializar e excluir o arquivo c: \ pagefile.sys, ou eu estou preso com o arquivo ac: \ pagefile.sys que nem sequer é reconhecido pelo próprio Windows (ele só vai dizer que há um arquivo de página em D :, e que C : não tem nenhum arquivo de paginação). Obviamente, porque algumas páginas já estão escritas no arquivo C: \ pagefile.sys.

Então, como eu poderia fazer isso de uma só vez? Ou, em dois gos, se isso for "scriptable em lote":)

TIA, Daniel:)

EDIT: Eu provavelmente deveria esclarecer: Executar esses comandos acima são todos válidos, mas eles só terão sucesso se eu executar novamente os comandos "attrib" e "del" na próxima inicialização. O arquivo de paginação C: está em uso no momento, por isso não posso excluir o arquivo que ele usa e o próprio Windows não o removerá quando eu configurá-lo para não usar C: como uma unidade de arquivo de paginação. Em vez disso, ele deixará um arquivo órfão c: \ pagefile.sys por trás (que é realmente grande).

Eu não preciso necessariamente que isso funcione de uma só vez, registrando os dois últimos comandos a serem executados após a reinicialização também seria ótimo:)

EDIT 2: Como parece não ser possível fazer de uma só vez, eu basicamente acabei fazendo a configuração do arquivo de paginação como descrito acima primeiro, depois descartei outro arquivo de lote em "% userprofile% \ Start Menu \ Programas \ Startup" que remove o arquivo órfão de C: no primeiro logon. Não é a solução mais bonita, mas funciona:)

    
por DanielSmedegaardBuus 11.11.2013 / 16:17

1 resposta

0

My problem is that while these are sane commands, the removal of the pagefile on C: requires me to reboot before those commands succeed.

Claro. Você pode expandir o arquivo de paginação (aumentar seu tamanho ou adicionar um a um novo volume) enquanto o Windows está rodando, mas você não pode reduzir (reduzindo seu tamanho ou removendo-o).

Or, in other words — I have to first create the D: pagefile, then reboot and delete the c:\pagefile.sys file

Você pode fazer isso ao mesmo tempo, para ter apenas que reinicializar uma vez.

I'm stuck with a c:\pagefile.sys file which isn't even recognized by Windows itself (it'll just say that there's a page file on D:, and that C: has no pagefile at all). Obviously because already some pages are written to the C:\pagefile.sys file.

Running those commands above are all valid, but they'll only succeed fully if I re-run the "attrib" and "del" commands at next boot. The C: pagefile is in use at the time, so I cannot delete the file it uses, and Windows itself won't remove it when I configure it to not use C: as a page file drive. Instead, it'll leave an orphaned c:\pagefile.sys file behind (which is really large).

Correto. O Windows reconheceu suas alterações, mas até você reiniciar, o arquivo de paginação ainda está em uso e não há nada que possa fazer sobre isso.

As it seems not possible to do in one go, I basically just ended up doing the pagefile configuration as described above first, then dropped another batch file into "%userprofile%\Start Menu\Programs\Startup" that removes the orphaned file from C: on the first logon. It isn't the prettiest solution, but it works :)

Ou, você pode usar um programa como MoveLater no seu arquivo em lote para que ele seja feito automaticamente pelo sistema em reinicialize.

Note que isto é diferente de executar algo da pasta Startup ou até mesmo das chaves de registro Run ; esses programas gravam os arquivos / pastas a serem movidos / renomeados / apagados para PendingFileRenameOperations , que é processado muito cedo no processo de inicialização (tecnicamente antes que o Windows seja executado), então eles podem ser usados para apagar arquivos de sistema que simplesmente não podem ser excluídos depois que o Windows estiver funcionando.

Isso é útil porque, às vezes, o Windows detecta determinados arquivos e pastas como sendo “especiais” e, mesmo que esteja configurado para não usá-los, ainda os bloqueará de qualquer maneira, evitando que você os exclua durante a inicialização. Ao agendá-lo para ser excluído antes de o Windows ser executado, você pode eliminar os arquivos / pastas para que o Windows nem os veja.

    
por 27.12.2013 / 07:52