No meu caso, eu queria usar o valor do Registro em SYSTEM\CurrentControlSet\Control\Session Manager!PendingFileRenameOperations
para excluir um arquivo na reinicialização. Estou usando o PowerShell.
Seria relativamente fácil usar algo como MoveFile
ou qualquer outro binário de linha de comando para adicionar os dados ao Registro, mas considero uma má forma usar ferramentas de terceiros (mesmo Sysinternals) quando métodos nativos estão disponíveis.
O Problema
PendingFileRenameOperations
só faz alguma coisa quando as entradas dentro dele (é um objeto Multistring) são sufixadas com dois caracteres NUL, mostrados no visualizador binário do Regedit como .. ..
. Adicionar as informações normalmente por meio do PowerShell não funciona e adicionar dados binários, embora possível, limparia todos os dados existentes no valor devido à falta de capacidade do PowerShell (certamente do PowerShell 2.0) de extrair os dados binários de um objeto Registry MultiString.
A pergunta
É possível usar métodos nativos em uma máquina PS2.0 para adicionar entradas de PendingFileRenameOperations
forma que o sistema operacional realmente as reconheça?
Sim. Use o seguinte código do PowerShell:
O que estamos fazendo aqui:
set-itemproperty
não funciona por qualquer motivo)\??\C:\File.exe
, que neste caso é\??\
+ o caminho do arquivo a ser excluído`0`0
no PowerShell) ao final da stringIsso garantirá que o arquivo seja excluído na próxima reinicialização.
Você pode usar o .NET do Powershell, por exemplo:
Além disso, acredito que PendingFileRenameOperations2 também é um valor de registro processado pelo Windows Session Manager na inicialização. Suspeito que você possa usar isso para seus propósitos sem a necessidade de tocar em PendingFileRenameOperations. Pode valer a pena um teste.