Pergunta

Tenho um problema aqui com uma implantação MSI na qual estou trabalhando (usando InstalarShield).Temos um programa em execução em segundo plano que precisa ser executado por usuário e iniciar automaticamente sem intervenção do usuário.

O problema é com Objeto de Política de Grupo/Diretório Ativo (GPO/AD), o aplicativo é iniciado no contexto SYSTEM antes que alguém esteja conectado, e não como o usuário que está prestes a efetuar login.O aplicativo só pode ser executado uma vez por usuário e parece que o processo SYSTEM impede o início do processo USER.Isso significa que os PCs precisam ser reinicializados duas vezes antes que o software possa ser implantado nos usuários.Como podemos parar isso?

Basicamente, o fluxo de trabalho atual é:

  1. A instalação/atualização é executada...matar aplicativo em segundo plano
  2. Instale novos arquivos
  3. Aplicativo em segundo plano de inicialização

Isso funciona para aplicativos publicados e interativos MSI instalações - são apenas os aplicativos 'atribuídos' que parecem ter o problema.Como a etapa 3 acontece no contexto do SISTEMA e não no contexto do usuário :(

Idealmente, eu faria com que a equipe de desenvolvimento corrigisse o arquivo EXE para evitar a inicialização no contexto SYSTEM, mas ainda falta um ciclo de lançamento e estou procurando uma solução baseada em instalador para esse período.

(Não conheço o Installscript...Então estou supondo VBScript é provavelmente o caminho a seguir se não houver nenhum material nativo do InstallShield que eu possa usar.)

Foi útil?

Solução

Você pode usar o Usuário de logon propriedade do Windows Installer como condição para a ação de iniciar o EXE.

Outras dicas

Eu não confiaria em uma propriedade do instalador do Windows para fazer isso.Se bem entendi, você deseja executar um arquivo EXE uma vez por usuário - provavelmente para configurar os padrões do usuário?O único momento em que você pode garantir que está no contexto correto é quando o usuário realmente faz login.Com a quantidade de representação acontecendo atualmente no cenário médio de implantação, simplesmente não confio em nada além de um login de usuário real como o estágio correto para executar arquivos EXE.

Existem muitas fontes de problemas:permissão personalizada e bloqueios de privilégios, bloqueio de servidor de terminal, redirecionamentos de virtualização, representação executada pelo sistema de implantação, substituições de sistema operacional para gravações de registro, etc.

A Microsoft possui um recurso chamado Active Setup que permitirá que você execute "algo executável" uma vez por usuário, no logon.Pode ser qualquer coisa, desde um script até um executável.Veja minha resposta aqui para mais detalhes: Atualizando o registro de cada perfil no Windows Server 2003

AHA!Eu sabia que deveria haver uma solução mais limpa...o código em que eu estava trabalhando estava começando a ficar parecido com isto:

On Error Resume Next 
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'BackgroundProcess.exe'")
For Each objProcess in colProcessList
    colProperties = objProcess.GetOwner(strNameOfUser,strUserDomain)
    If strNameOfUser = "SYSTEM" Then    
        objProcess.Terminate()
    End If
Next
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top