Removendo aplicativos fantasmas dos pools de aplicativos no IIS7

38

Eu tenho um aplicativo em um dos meus pools de aplicativos que possui um caminho virtual '/Site/login.aspx'. Quero removê-lo, mas ele não existe mais no meu computador e está me causando problemas na configuração do AppFabric.

Entendo que você pode remover esses aplicativos fantasmas recriando o aplicativo no IIS e pressionando Remover. Isso livrará o aplicativo do pool, mas, neste caso, não posso recriar o aplicativo devido ao /login.aspx no caminho virtual

Alguma idéia de como removo esta entrada incorreta?

obrigado

Col
fonte

Respostas:

44

Desde que eu tive o mesmo problema; pools de aplicativos com aplicativos que não existiam mais, fiz algumas pesquisas e finalmente consegui resolver o problema.

Aqui estão alguns passos:

  1. Localize e edite o arquivo de configuração do IIS 7 "applicationHost.config" com um editor de texto. Ele deve ser armazenado em " C: \ windows \ system32 \ inetsrv \ config ". Como a pasta está de alguma forma "protegida", costumo editar da seguinte maneira:
    1. Abra o Windows Explorer
    2. Navegue para "C: \ windows \ system32 \ inetsrv \ config"
    3. Copie o arquivo "applicationHost.config"
    4. Cole-o em uma pasta onde você pode editá-lo, por exemplo, sua área de trabalho
    5. Abra-o com seu editor de escolha e edite-o
    6. Copie-o novamente com o Windows Explorer para "C: \ windows \ system32 \ inetsrv \ config"
  2. Faça um backup do seu arquivo "applicationHost.config"!
  3. Pesquise com um editor de texto no seu "applicationHost.config" os aplicativos não existentes. Eles devem estar localizados em algum lugar dentro de um <application ...>nó XML.
  4. Exclua o <application ...>(s) nó (s) de todos os seus aplicativos fantasmas.
  5. Salve o arquivo e copie-o novamente para "C: \ windows \ system32 \ inetsrv \ config"
  6. Atualize o console de gerenciamento do IIS. Seus pools de aplicativos agora devem estar sem os aplicativos fantasmas que você excluiu anteriormente.
  7. Na verdade, remova o pool de aplicativos agora vazio.

Isso funcionou para mim, se não funcionar para você, poste um comentário aqui. Uma boa ajuda foi esta postagem no fórum do IIS .

Uwe Keim
fonte
6
Além disso, me deparei com este artigo. Eu não usá-lo como a solução acima funcionou para mim caça Zombies - como remover órfão iis aplicações web
Col
1
A abordagem do PowerShell no link do comentário do @ Col acima é uma solução limpa e funciona muito bem.
Recep
4

Provavelmente, é mais seguro e mais simples do que editar o applicationHost.config.

Powershell  
PS C:\Windows\system32> import-module WebAdministration
PS C:\Windows\system32> iis:
PS IIS:\> cd .\AppPools
PS IIS:\AppPools> ls
PS IIS:\AppPools> del [name of phantom AppPool]  
Greg Askew
fonte
1
Isso remove os pools de aplicativos . Para remover aplicativos (fantasmas), use a abordagem do artigo vinculado em serverfault.com/questions/283467/…
bvgheluwe
1

Muito mais simples:

  1. Veja o aplicativo antigo X e lembre-se do caminho (antigo) Y
  2. Crie o caminho / pasta (antigo) Y com o Explorer
  3. Atualizar console de gerenciamento do IIS
  4. Você encontrará a pasta Y recém-criada e o aplicativo atribuído X
  5. Clique com o botão direito do mouse no (antigo) aplicativo X e escolha "Remover"
  6. Remova o caminho Y com o Explorer
  7. Atualize o console de gerenciamento do IIS novamente
  8. Hurrah
Mathias Sch.
fonte
1

Os aplicativos filhos não são excluídos automaticamente e o Gerenciador do IIS não pode exibi-los na árvore. Portanto, esse é seu problema ...

Uma maneira rápida e robusta é usar um script do PowerShell para obter todos os aplicativos, testar se o caminho físico ainda existe e, se não houver, excluir o aplicativo:

# This is for IIS 7, make sure the snap-in is installed first: https://www.iis.net/downloads/microsoft/powershell
Add-PSSnapin WebAdministration

# Get all IIS sites
Get-ChildItem IIS:\Sites | foreach {
    $site = $_;

    # Get all applications without existing physical path
    $applications = Get-ChildItem $site.PsPath | Where-Object { $_.NodeType -eq "application" -and (Test-Path $_.PhysicalPath) -eq $False };

    # List all phantom applications
    $applications | FT

    # Remove applications
    $applications | Remove-WebApplication -Site $site.Name
}
Ronald
fonte
Apenas uma pequena correção: o Gerenciador do IIS pode exibir os aplicativos fantasmas selecionando o nó 'Pools de aplicativos' ou 'Sites' e selecionando 'Exibir aplicativos' em um appPool / site. Só permite excluir do nó 'Sites'!
Ronald
Isso funcionou perfeitamente para mim, embora eu tenha que alterar "Add-PSSnapIn" para "Import-Module" no Server 2012 R2.
18138 ldam
1

Existe uma maneira fácil de corrigir isso.

  1. Selecione o site com os aplicativos Phantom no pool de aplicativos.
  2. No lado direito, menu "Ação", selecione "Visualizar aplicativos". Esta lista deve mostrar todos os aplicativos que estão no site, Phantom ou não.
  3. Tudo o que você precisa fazer é selecionar o Aplicativo e selecionar "Remover" no menu "Ação" à direita.
Oddvar
fonte
0

Por que não editar o MetaBase.xml diretamente? Claro, faça backup antes disso.

Ou crie um pool "temporário", mova todos os outros aplicativos para lá, remova o pool de origem e renomeie (se necessário) o novo pool.

Ensolarado
fonte
4
Primeiro motivo: como é o IIS7, é necessário editar o ApplicationHost.config! Mas eu concordo, não entendo por que não é apenas "digitar esse URL em um pool de aplicativos diferente primeiro"?
TristanK
2
Obrigado pela ajuda. Mudei a URL para um pool temporário primeiro e isso remove o problema com o AppFabric. No entanto, ainda não consigo ver como posso remover o aplicativo desonesto, pois você não pode excluir um pool de aplicativos enquanto ele tiver aplicativos que o utilizam e não consigo excluir o aplicativo do pool de aplicativos
Col
0

Fiz uma combinação das duas respostas listadas acima, pois não queria mexer no applicationHost.config manualmente.

Etapa 1 - Crie um pool de aplicativos temporário - digamos "temp".

Etapa 2 - Mova todos os aplicativos fantasmas para esse pool de aplicativos temporários.

Etapa 3 - Use o PowerShell em uma das respostas acima -

Powershell  
PS C:\Windows\system32> import-module WebAdministration
PS C:\Windows\system32> iis:
PS IIS:\> cd .\AppPools
PS IIS:\AppPools> ls
PS IIS:\AppPools> del [name of phantom AppPool]  

Voila!

nixish
fonte