NullReference Exception no Latromi Server Installer

Problema

Ao tentar instalar o Latromi Server, em um novo computador, foi observado o seguinte erro:

Transcrição do erro:

Não foi possível carregar os sites do host. O servidor não conseguiu processar a solicitação devido a um erro interno. Para obter mais informações sobre o erro, ative IncludeExceptionDetailInFaults (a partir da classe ServiceBehaviorAttribute ou do comportamento de configuração ) no servidor para enviar as informações de exceção de volta para o cliente ou ative o rastreamento de acordo com a documentação do Microsoft .NET Framework SDK e examine os logs de rastreamento do servidor.

Diagnóstico

Arquivos de Log

Nos arquivos de log do Latromi Installation Service, consta as seguintes informações:

Data/Hora            Tipo     Origem                Categoria                 ID     Tempo            Mensagem
===========================================================================================================================================================================================================================================
2025-02-10 22:20:29  Info     LatromiInstSVC        --                        --     --               Programa iniciado em 'C:\Program Files (x86)\LATROMI\Installation Service\LatromiInstSVC.exe'.
2025-02-10 22:20:29  Debug    LatromiInstSVC        --                        --     --               Interpretando linha de comando: 
2025-02-10 22:20:29  Debug    LatromiInstSVC        --                        --     --               Chave de registro criada: HKEY_LOCAL_MACHINE\SOFTWARE\LATROMI\Path Mapping\Folders
2025-02-10 22:20:29  Debug    LatromiInstSVC        --                        --     --               Valor de registro criado: Installation Service=C:\Program Files (x86)\LATROMI\Installation Service
2025-02-10 22:20:29  Info     LatromiInstSVC        --                        --     --               Serviço 'LatromiInstSVC': Iniciando... [Thread 4]
2025-02-10 22:20:29  Info     LatromiInstSVC        --                        --     --               Hospedando o serviço 'AppUpdater' em net.tcp://localhost:57249/LatromiInstallSVC/AppUpdater/
2025-02-10 22:20:30  Info     LatromiInstSVC        --                        --     --               Hospedando o serviço 'AppUninstaller' em net.tcp://localhost:57249/LatromiInstallSVC/AppUninstaller/
2025-02-10 22:20:30  Info     LatromiInstSVC        --                        --     --               Hospedando o serviço 'AppInstaller' em net.tcp://localhost:57249/LatromiInstallSVC/AppInstaller/
2025-02-10 22:20:30  Info     LatromiInstSVC        --                        --     --               Hospedando o serviço 'InstallerCommons' em net.tcp://localhost:57249/LatromiInstallSVC/InstallerCommons/
2025-02-10 22:20:30  Info     LatromiInstSVC        --                        --     --               Hospedando o serviço 'WebServerManager' em net.tcp://localhost:57249/LatromiInstallSVC/WebServerManager/
2025-02-10 22:20:30  Info     LatromiInstSVC        --                        --     --               Hospedando o serviço 'DataBaseManager' em net.tcp://localhost:57249/LatromiInstallSVC/DataBaseManager/
2025-02-10 22:20:30  Info     LatromiInstSVC        --                        --     --               Hospedando o serviço 'BackgroundUpdater' em net.tcp://localhost:57249/LatromiInstallSVC/BackgroundUpdater/
2025-02-10 22:20:30  Info     LatromiInstSVC        --                        --     --               Serviço 'LatromiInstSVC': Iniciado.
2025-02-10 22:20:40  Info     LatromiInstSVC        --                        --     --               Iniciando atualizações automáticas... [Thread 5]

2025-02-10 22:20:40  Info     LatromiAutoUpdate     --                        --     --               Serviço de atualização automática iniciado.
2025-02-10 22:20:40  Info     LatromiAutoUpdate     --                        --     --               Serviço de exclusão de versões anteriores iniciado.
2025-02-10 22:20:40  Debug    LatromiAutoUpdate     --                        --     --               Os parâmetro foram salvos no registro do Windows.
2025-02-10 22:20:40  Error    LatromiAutoUpdate     --                        --     --               System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto.      em LATROMI.Install.AutoUpdateSettings.Load()      em LATROMI.AutoUpdate.AutoUpdateService.CheckDefaultUpdates()      em LATROMI.AutoUpdate.AutoUpdateService.StartUpdate()      [System.NullReferenceException]         Message:   Referência de objeto não definida para uma instância de um objeto.      Source:   LATROMI.AutoUpdate   
    System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto.
       em LATROMI.Install.AutoUpdateSettings.Load()
       em LATROMI.AutoUpdate.AutoUpdateService.CheckDefaultUpdates()
       em LATROMI.AutoUpdate.AutoUpdateService.StartUpdate()

    em LATROMI.AutoUpdate.AutoUpdateService.StartUpdate()
       em LATROMI.AutoUpdate.AutoUpdateService.Start()
       em System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       em System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       em System.Threading.ThreadHelper.ThreadStart()

2025-02-10 22:20:40  Info     LatromiInstSVC        --                        --     --               Procurando pastas que podem ser excluídas...
2025-02-10 22:20:40  Info     LatromiInstSVC        --                        --     --               Iniciando exclusão de versões anteriores.
    Nenhuma pasta encontrada.

2025-02-10 22:20:40  Info     LatromiInstSVC        --                        --     --               Exclusão de versões anteriores concluída.

Detalhes Internos do Erro

Conforme sugerido na mensagem de erro inicial, ao habilitar o parâmetro includeExceptionDetailInFaults no arquivo LatromiInstSVC.exe.config, a verdadeira mensagem de erro é apresentada:

Detalhes do erro no arquivo de Log da pasta C:\ProgramData\LATROMI\LatromiServerSetup\Log:

2025-02-12 00:20:21  Info     LatromiServerSetup    --                        --     --               Programa iniciado em 'C:\Users\Dan\Downloads\latromi-server-setup.exe'.
2025-02-12 00:20:21  Debug    LatromiServerSetup    --                        --     --               Interpretando linha de comando: 
2025-02-12 00:20:24  Error    LatromiServerSetup    --                        --     --               System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: Falha na recuperação de fábrica de classes COM do componente com CLSID {2B72133B-3F5B-4602-8952-803546CE3344} devido ao seguinte erro: 80040154 Classe não registrada (Exceção de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). (O Detalhe da Falha é igual a ExceptionDetail, provavelmente criado por IncludeExceptionDetailInFaults=true, cujo valor é:   System.Runtime.InteropServices.COMException: Falha na recuperação de fábrica de classes COM do componente com CLSID {2B72133B-3F5B-4602-8952-803546CE3344} devido ao seguinte erro: 80040154 Classe não registrada (Exceção de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).      em System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)      em System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType)      em System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj)      em System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)      em System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)     ...).      [System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]]         Message:   Falha na recuperação de fábrica de classes COM do componente com CLSID {2B72133B-3F5B-4602-8952-803546CE3344} devido ao seguinte erro: 80040154 Classe não registrada (Exceção de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).      Source:   mscorlib   
    System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: Falha na recuperação de fábrica de classes COM do componente com CLSID {2B72133B-3F5B-4602-8952-803546CE3344} devido ao seguinte erro: 80040154 Classe não registrada (Exceção de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). (O Detalhe da Falha é igual a ExceptionDetail, provavelmente criado por IncludeExceptionDetailInFaults=true, cujo valor é:
    System.Runtime.InteropServices.COMException: Falha na recuperação de fábrica de classes COM do componente com CLSID {2B72133B-3F5B-4602-8952-803546CE3344} devido ao seguinte erro: 80040154 Classe não registrada (Exceção de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
       em System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)
       em System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType)
       em System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj)
       em System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
       em System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
      ...).

    em LATROMI.SetupUI.WinForms.InstallerSettingsDialog.LoadWebSites()
       em LATROMI.SetupUI.WinForms.InstallerSettingsDialog.SetupDialog()
       em LATROMI.SetupUI.WinForms.InstallerSettingsDialog.this_Shown(Object sender, EventArgs e)
       em System.Windows.Forms.Form.OnShown(EventArgs e)
       em System.Windows.Forms.Form.CallShownEvent()
       em System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)
       em System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)
       em System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       em System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)
       em System.Windows.Forms.Control.InvokeMarshaledCallbacks()
       em System.Windows.Forms.Control.WndProc(Message& m)
       em System.Windows.Forms.ScrollableControl.WndProc(Message& m)
       em System.Windows.Forms.ContainerControl.WndProc(Message& m)
       em System.Windows.Forms.Form.WndProc(Message& m)
       em System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       em System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       em System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       em System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       em System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       em System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       em System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       em System.Windows.Forms.Application.RunDialog(Form form)
       em System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
       em System.Windows.Forms.Form.ShowDialog()
       em LATROMI.SetupUI.Facade.StartMultiInstaller(String setupCopyPath, Action`1 completeAction)
       em LATROMI.ServerSetup.Program.Install()
       em LATROMI.ServerSetup.Program.Main(String[] args)

Consultando a classe {2B72133B-3F5B-4602-8952-803546CE3344} pwlo PowerShell em 2 computadores diferentes (onde o serviço funciona sem erros), o resultado é este:

Get-ItemProperty -Path "Registry::HKEY_CLASSES_ROOT\CLSID\{2B72133B-3F5B-4602-8952-803546CE3344}"

(default)    : Microsoft.ApplicationHost.WritableAdminManager
AppID        : {9fa5c497-f46d-447f-8011-05d03d7d7ddc}
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_CLASSES_ROOT\CLSID\{2B72133B-3F5B-4602-8952-803546CE3344}
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CLASSES_ROOT\CLSID
PSChildName  : {2B72133B-3F5B-4602-8952-803546CE3344}
PSProvider   : Microsoft.PowerShell.Core\Registry

Informações do Ambiente

O computador onde o erro ocorreu, tinha as seguintes características:

  • Windows 10 Pro, com todas as atualizações
  • .NET 4.8 instalado
  • Sem IIS Instalado

Solução

A solução exige correção no Latromi. É necessário encontrar a origem do erro (método LATROMI.Install.AutoUpdateSettings.Load()) e aplicar correção.

Adicionei mais informações ao Diagnóstico, com detalhes internos do erro.

Microsoft.ApplicationHost.WritableAdminManager é um componente que faz parte da API do Microsoft.Web.Administration, usada para gerenciar configurações do IIS por meio do ApplicationHost.config.

Parece que esse componente está no arquivo wmsvc.dll, que é embarcada apenas no IIS Completo.

Se não encontrar uma solução de carregar esse componente, a sugestão é deixar de usar Microsoft.Web.Administration para o IIS Express, alterando o arquivo applicationhost.config diretamente via C# nestes casos, ou usar linhas de comando do iisexpress.exe.

Correção efetuada.

Aguardando liberação de versão.

Correção liberada na versão Installation Service Versão 1.0.185.

1 curtida

Este tópico foi fechado automaticamente 7 dias depois da última resposta. Novas respostas não são mais permitidas.