Pergunta

Eu tenho um CustomAction como parte de um MSI.

Ele deve ser executado como uma conta de domínio que também é membro dos Administradores local conta.

Não pode usar o sinalizador NoImpersonate para executar a ação personalizada como Autoridade NT \ System, pois não irá, em seguida, obter acesso aos recursos da rede.

Em Vista / 2008 com o UAC ativado se NoImpersonate está desligado, em seguida, ele será executado como o usuário executar, mas com o sem privilégios token e não tenha acesso aos recursos locais, tais como .InstallState. Veja UAC Arquitetura

Alguém sabe de uma maneira ou

  • Força da MSI para executar com o elevated token da mesma maneira que a execução de um prompt de comando elevado faz?

  • Força CustomAction para executar elevada (requireAdministrator no manifesto não parece trabalho)?

  • Exercite-se o UAC está habilitado e se não foi ran elevado e se assim avisar ou cancelar a instalação?

Foi útil?

Solução

Respondendo a minha própria pergunta para qualquer outro s0d pobre olhando para isso.

  • Você não pode adicionar um manifesto para um MSI. Você pode adicionar um Setup.exe ou bootstrapper que desembolsar o MSI e manifesto que, com requireAdministrator mas que derrotas algum do ponto de usar um MSI.

  • Adicionando um manifesto para um CustomAction não funciona como é decorreu de msiexec.exe

A maneira que eu tenho abordado este é para definir o MSIUSEREALADMINDETECTION propriedade para 1, de modo a condição privilegiada realmente funciona e adicionar uma condição de inicialização para Privileged que dá uma mensagem de erro sobre a execução através de um prompt de comando elevado e encerra a instalação.

Isto tem o efeito colateral feliz - quando um msi é executado a partir de um comando elevado CustomActions diferidos rápidas são correu como o usuário atual com um administrador completo simbólica (em vez de token de usuário padrão), independentemente do configuração NoImpersonate .

Mais detalhes - http: // www.microsoft.com/downloads/details.aspx?FamilyID=2cd92e43-6cda-478a-9e3b-4f831e899433

[Edit] - Eu coloquei script aqui que permite que você adicione a propriedade MSIUSEREALADMINDETECTION como VS não tem capacidade de fazê-lo e de Orca uma dor.

Outras dicas

requireAdministrator no manifesto deve funcionar.

Você também pode usar um arquivo bootloader .exe que pode usar ShellExecute com "runas", como o verbo (você pode usar 7-Zip para criar o bootloader, ou existem muitas outras maneiras).

Você pode criar um simples SFX arquivo de arquivo de msi arquivo com Winrar e estas opções:

  • guia Configuração> Executar após entrada de execução : o nome do arquivo msi

  • guia Avançado> Mark Pedido de Acesso administrativo opção de caixa de seleção

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