ngen.exe alta CPU windows 10 - Assemblies Desinstalam Endless Loop

ngen.exe alta CPU windows 10 - Assemblies Desinstalam Endless Loop

Sempre que deixo meu computador ocioso por alguns minutos, volto e meu Process Explorer mostra que 'ngen.exe' está em execução e ocupando 2 dos meus 4 cpus.

Pergunta: Existe uma maneira de desativar o NGEN.exe como tarefa em segundo plano?

Eu gostaria de (como muitos outros na Internet) compilar todos os binários .net de uma só vez, em vez de fazer com que o computador faça isso 'automaticamente' toda vez que eu o deixar ocioso. Verifiquei nos fóruns da Microsoft e até agora ninguém tem uma resposta completa para esse problema, e muitos estão tendo os mesmos problemas.

Aparentemente, alguma biblioteca no framework .net está precisando ser recompilada e fica 'travada' e coloca a CPU em alta e fica em loop repetidas vezes.

Acabei de experimentar esse mesmo problema e há outro tópicotenta responder mas está incompleto

Regedit de /HKLM/SOFTWARE/Microsoft/Windows/Current Version/RUN não tem entrada para executar o compilador .net. Algo mais deve estar causando o disparo do ngen.exe.

Alguém pode postar outros locais que possam estar desencadeando a execução disso?

Eu gostaria de desligá-lo, como tenho certeza que muitos outros fariam. Também desativei as atualizações automáticas no Windows 10.

ATUALIZAÇÃO: O Process Explorer diz que é isso que está sendo executado:

Desinstalar "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe" ​e\Microsoft.VisualSt‌ ​udio.Tools.Applicati‌​ons.Hosting.ni.dll" /noroot /LegacyServiceBehavior – Viktor 5 minutos atrás

Desinstalar "C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe" ‌​ork.ni .dll" /noroot /LegacyServiceBehavior – Viktor 4 minutos atrás, edição

Desinstalar "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe" cidade.ni .dll" /noroot /LegacyServiceBehavior

Ele continua funcionando indefinidamente. - essa é a saída do Process Explorer. É extremamente irritante e parece acontecer TODA VEZ que saio da minha mesa.

PERGUNTA: parece que estes são processos legítimos. Alguém sabe uma maneira de remover manualmente esses comandos de desinstalação e compilar a estrutura .net completamente uma vez, em vez de fazer um loop repetidamente?

TESTE ATUAL: Eu matei o processo e ngentask.exe então fui para Windows\assembly e movi essas pastas de imagens nativas para um diretório temporário. Manterei você informado se ele reiniciar novamente. Provavelmente, se as pastas NativeImages estiverem faltando, ele não tentará continuar desinstalando esses assemblies.

Responder1

Baixe o script Easy NGEN, execute-o como administrador e selecione a opção 1 para executar uma execução completa do ngen:

insira a descrição da imagem aqui

Isso leva muito tempo e executa todas as operações ngen pendentes. Depois disso, a fila ngen estará vazia e você não deverá ver as outras tarefas novamente.

(Se o link não funcionar, copie e cole o código em um arquivo txt e renomeie para cmd):

@echo off
title Easy Ngen Runner v5 for '.NET 4.x series' by Burf

"%windir%\system32\reg.exe" query "HKU\S-1-5-19" >nul 2>&1 && (
goto :admincheckok
) || (
echo      -------
echo  *** WARNING ***
echo      -------
echo.
echo.
echo ADMINISTRATOR PRIVILEGES NOT DETECTED!
call :line
echo.
echo.
echo This script must be run with administrator privileges!
echo.
echo To do so, right click on this script and select 'Run As Administrator'
echo.
goto :fin
)

:admincheckok

"%windir%\system32\reg.exe" query "hklm\software\microsoft\Windows NT\currentversion" /v buildlabex >"%temp%\os.txt"
find /i "AMD64" <"%temp%\os.txt">nul
if %errorlevel% equ 0 (set arch=x64) else (set arch=x86)

for /f "tokens=3* delims= " %%G in ('reg query "hklm\software\microsoft\Windows NT\currentversion" /v productname') do (set winv=%%G %%H)
echo %winv%|find /i "Windows 10" >nul
if errorlevel 0 (set w10=1&for /f "tokens=3" %%G in ('reg query "hklm\software\microsoft\Windows NT\currentversion" /v UBR') do (set /a UBR=%%G))
if defined w10 (for /f "skip=2 tokens=3,4,6,7 delims=. " %%G in ('type "%temp%\os.txt"') do (set "win=%winv% %arch% Build %%G.%UBR% {%%I %%J}")
) else (
for /f "skip=2 tokens=3,4,6,7 delims=. " %%G in ('type "%temp%\os.txt"') do (set "win=Legacy %winv% %arch% Build %%G.%%H {%%I %%J}")
)
del "%temp%\os.txt"

if not exist "%windir%\Microsoft.NET\Framework\v4.0.30319" goto :notinstalled

:menu
call :title
echo.
echo 1. Run full Ngen 'update' task
echo.
echo 2. Run standard Ngen 'update' task
echo.
echo 3. Execute queued Ngen items (what Windows does in background)
echo.
echo 4. Visit the 'homepage' of Burf:
echo    (http://1drv.ms/1oVTfju)
echo.
echo 5. Information
echo.
echo 6. Exit
echo.
echo. 
echo.
choice /c 123456 /N /M "Please enter your selection> "
if errorlevel 6 goto :eof
if errorlevel 5 goto :info
if errorlevel 4 start http://1drv.ms/1oVTfju&goto :menu
if errorlevel 3 goto :ngub
if errorlevel 2 goto :ngus
if errorlevel 1 goto :nguf


:info
call :title
echo This script allows your to easily run the .NET Framework tool Ngen
echo (Native Image Generator) program.
echo.
echo The three options in the menu represent the three different methods in
echo which is can be run:
echo Menu option 1 - Recreates all images
echo Menu option 2 - Processes images that have become invalid
echo Menu option 3 - Execute items already in queue to be processed by Windows
echo.
echo Option 1 is really only beneficial after a .NET Framework or a major Windows
echo update has been installed. Option 3 executes those items already in the
echo queue, this just processes the items immediately instead of during idle
echo processor time.
echo.
echo Option 2 should be used for general use, option 1 after a .NET Framework
echo or major Windows update (including Insider Previews), and option 3 is
echo only provided for completeness of this script. It is the 'least useful'.
echo.
echo It makes sense to have queued items processed and native images updated
echo before they are actually required!
echo.
echo.
echo Press any key to return to menu...
pause >nul
goto :menu


:nguf
call :title
echo Running x86 update item task. Some 'errors' may show, this is expected.
call :line
echo.
"%windir%\Microsoft.NET\Framework\v4.0.30319\ngen.exe" update /force
if defined task (
"%windir%\Microsoft.NET\Framework\v4.0.30319\ngentask.exe" /runtimewide
)
echo.
if %arch% equ x86 (goto :nudone)
echo.
echo Now running x64 update item task. Some 'errors' may show, this is expected.
call :line
echo.
"%windir%\Microsoft.NET\Framework64\v4.0.30319\ngen.exe" update /force
if defined task (
"%windir%\Microsoft.NET\Framework64\v4.0.30319\ngentask.exe" /runtimewide
)
goto :nudone


:ngus
call :title
echo Running x86 update item task. Some 'errors' may show, this is expected.
call :line
echo.
"%windir%\Microsoft.NET\Framework\v4.0.30319\ngen.exe" update
if defined task (
"%windir%\Microsoft.NET\Framework\v4.0.30319\ngentask.exe" /runtimewide
)


echo.
if %arch% equ x86 (goto :nudone)
echo.
echo Now running x64 update item task. Some 'errors' may show, this is expected.
call :line
echo.
"%windir%\Microsoft.NET\Framework64\v4.0.30319\ngen.exe" update
if defined task (
"%windir%\Microsoft.NET\Framework64\v4.0.30319\ngentask.exe" /runtimewide
)
goto :nudone


:ngub
call :title
echo Running x86 update item task. Some 'errors' may show, this is expected.
call :line
echo.
"%windir%\Microsoft.NET\Framework\v4.0.30319\ngen.exe" executequeueditems
if defined task (
"%windir%\Microsoft.NET\Framework\v4.0.30319\ngentask.exe" /runtimewide
)


echo.
if %arch% equ x86 (goto :nudone)
echo.
echo Now running x64 update item task. Some 'errors' may show, this is expected.
call :line
echo.
"%windir%\Microsoft.NET\Framework64\v4.0.30319\ngen.exe" executequeueditems
if defined task (
"%windir%\Microsoft.NET\Framework64\v4.0.30319\ngentask.exe" /runtimewide
)
goto :nudone


:nudone
echo.
echo.
echo Done! Please note that some 'errors' may have appeared. These are, for the
echo most part, not unexpected and are not deemed critical.
echo.
goto :fin


:title
cls
echo -----------------------------------------
echo Easy Ngen Runner v5 for '.NET 4.x' series by Burf
echo -----------------------------------------
echo %win%
echo.
goto :eof


:fin
echo.
echo Press any key to exit...
pause >nul
goto :eof


:notinstalled
echo Microsoft .NET Framework 4, 4.5, 4.6, or 4.7 NOT detected. Please install before
echo using this script. If already installed, something may be 'wrong'...
goto :fin


:line
echo ____________________________________________________________________________
goto :eof

Responder2

Excluir uma chave do registro foi o que finalmente funcionou para mim. O problema era que o ngen tentava realocar memória continuamente para a mesma DLL corrompida no registro. Eventualmente, consumiria toda a memória disponível no computador.

Excluir a chave "\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\v2.0.50727\NGenService\Roots" funcionou para mim. Interromper a tarefa agendada ou eliminar o ngen.exe é apenas uma medida temporária e não resolve o problema.

Como a Microsoft pôde deixar um problema como esse durar tanto tempo está além da minha compreensão. Hoje foi o primeiro dia em que uma pesquisa resultou em uma resposta para mim.

Mais informações sobre o problema podem ser encontradas aquihttps://aloiskraus.wordpress.com/2017/12/13/the-case-of-ngen-exe-needing-50-gb-of-memory/

Responder3

isso funcionou para mim, executei uma verificação de vírus depois de fazer tudo o que as pessoas disseram on-line e ele voltou imediatamente, havia um vírus na forma de um arquivo .dll que tinha o nome .netframework, descobri que era um vírus de mineração de CPU, espero isso ajuda

informação relacionada