Pergunta

Consigo desinstalar com êxito um aplicativo de terceiros por meio da linha de comando e de um instalador personalizado do Inno Setup.

Execução da linha de comando:

MSIEXEC.exe /x {14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn

Comando de configuração do Inno:

[Run]
Filename: msiexec.exe; Flags: runhidden waituntilterminated; 
Parameters: "/x {{14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn";
StatusMsg: "Uninstalling Service...";

Também consigo desinstalar o aplicativo programaticamente ao executar o seguinte código C# no modo de depuração.

Código C#:

string fileName = "MSIEXEC.exe";
string arguments = "/x {14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn";

ProcessStartInfo psi = new ProcessStartInfo(fileName, arguments)
{
    CreateNoWindow = true,
    UseShellExecute = false,
    RedirectStandardOutput = true
};

Process process = Process.Start(psi);
string errorMsg = process.StandardOutput.ReadToEnd();
process.WaitForExit();

O mesmo código C#, no entanto, produz a seguinte saída de falha quando executado como um serviço do Windows compilado e implantado:

"This action is only valid for products that are currently installed."

Comentários adicionais:

  • O serviço Windows que está emitindo o comando desinstala está em execução na mesma máquina que o código que está sendo testado no modo de depuração.O serviço do Windows está em execução/logado como a conta do sistema local.
  • Consultei meus logs de aplicativos e validei que os argumentos de comando executados são os mesmos no modo de depuração e liberação.
  • Consultei o visualizador de eventos, mas ele não oferece pistas.

Pensamentos?Qualquer ajuda seria muito apreciada.Obrigado.

Foi útil?

Solução 3

Obrigado àqueles que oferecem ajuda.Este parece ser um problema de permissões.Atualizei meu serviço para ser executado com uma conta de administrador e consegui desinstalar com êxito o aplicativo de terceiros.Na opinião de Orion, embora a conta do Sistema Local seja uma conta poderosa que tem acesso total ao sistema - http://technet.microsoft.com/en-us/library/cc782435.aspx - parece não ter os direitos necessários para executar a desinstalação.

[Veja comentários adicionais para a história completa sobre a capacidade do LocalSystem de desinstalar o aplicativo para o qual foi instalado.]

Outras dicas

Passo 1: Verifique os arquivos de log de erros do MSI

Suspeito que seu problema seja devido à execução como LocalSystem.

A conta do sistema local não é igual a uma conta de usuário normal que possui direitos de administrador.Ele não tem acesso à rede e sua interação com o registro e o sistema de arquivos é bem diferente.

Da memória, quaisquer solicitações de leitura/gravação em seu 'diretório inicial' ou HKCU no registro vão para o perfil de usuário padrão ou, no caso de diretórios temporários, c:\windows\temp

Já me deparei com problemas semelhantes com a instalação no passado, um cliente estava usando a conta SYSTEM para instalar e isso estava causando todos os tipos de problemas de permissão para usuários não administrativos.

Os arquivos de log MSI realmente não vão ajudar se o aplicativo não parecer "instalado", sugiro começar capturando a saída de MSIINV.EXE na conta do sistema, você receberá um "Inventário" dos programas atualmente instalados (ou o que o usuário vê instalado) http://blogs.msdn.com/brada/archive/2005/06/24/432209.aspx

Acho que você provavelmente precisará voltar à prancheta e ver se realmente precisa do serviço do Windows para desinstalar.Você provavelmente encontrará todos os tipos de problemas do Vista UAC, se ainda não o fez...

Isso é bizarro.LocalSystem definitivamente tem privilégios para instalar aplicativos (é assim que o Windows Update e a implantação de software no Active Directory funcionam), portanto, ele também deve ser capaz de desinstalar.

Talvez o aplicativo seja inicialmente instalado por usuário em vez de por máquina?

@Paul Lalonde

O instalador do aplicativo está incluído em um instalador InnoSetup personalizado.O instalador do InnoSetup, por sua vez, é executado manualmente pelo usuário logado.Dito isto, a desinstalação é acionada por um serviço executado na conta do Sistema Local.

Aparentemente, você estava no caminho certo.Fiz um teste rápido em que o serviço foi executado na conta LocalSystem, instalei e desinstalei o aplicativo e tudo funcionou perfeitamente.Você estava certo.A conta LocalSystem requer permissões de desinstalação para os aplicativos nos quais é instalada.Você salvou o dia.Obrigado pelo feedback!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top