Como adicionar um atalho de inicialização a um usuário que nunca fez o login (perfil não criado)?

0

No momento, estou instalando meu software com uma conta de administrador. No final do processo, preciso adicionar um atalho de inicialização ao UserX, mas este UserX ainda não efetuou logon no sistema e, portanto, não há perfil para eles em \ USERS \ (ou pasta equivalente, dependendo da versão do Windows).

Existe alguma sugestão ou solução para isso? Hoje eu tenho que colocá-lo em AllUsers, mas isso tem o efeito colateral negativo de iniciar o aplicativo quando eu faço o login na conta ADMIN (o que é totalmente errado).

Atualmente, eu preciso dar suporte ao Windows XP, 7 e 10.

Hoje eu uso um VBScript com WMI para iterar sobre os ProfileLists (em HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList) para localizar meu usuário (que ainda não está lá) e usar objWshShell.CreateShortcut com os caminhos corretos - funciona muito bem se o perfil do usuário existir e também para AllUsers, mas não consigo encontrar uma solução para o caso em que o usuário nunca efetuou login (como um usuário DOMAIN - que é minha principal preocupação).

Qualquer ideia seria muito apreciada. Obrigado,

    
por Shaitan00 05.07.2016 / 20:38

3 respostas

1

Não há como adicionar um atalho a um usuário inexistente ainda, então o caminho a seguir é iniciá-lo a cada inicialização e determinar se o script foi executado antes ou não.

Você pode fazer isso colocando um valor no registro ou colocando um arquivo em seu diretório de perfil (opção melhor) e verifique sua existência.

Se por algum motivo você precisar relançar o script para todos, basta remover o valor do registro ou do diretório de perfil deles.

Funciona devido à seguinte técnica.

Quando um usuário faz o login pela primeira vez, a primeira coisa que está sendo feita é: Uma pasta de perfil está sendo feita localmente, uma existente é sincronizada do servidor.

Isso é necessário porque as instalações, etc., que acontecem durante o login, precisarão estar lá e outras configurações, como políticas de grupo, também são armazenadas.

O script de logon é executado no final do login e, neste momento, o diretório de perfil existe.

Agora, considerando que esta é a primeira vez que ele é executado, a verificação do arquivo: % APPDATA% \ installed.dat pode ser usada para ver se o script foi executado antes ou não. O primeiro login, esse arquivo não está lá, então o script continua a fazer sua parte e a instalação. No final, criamos o arquivo % APPDATA% \ installed.dat e o script termina normalmente.

No próximo logon, todos os arquivos já existem, portanto, durante o login, a sincronização com o servidor é executada. Ele atualizará as alterações, mas o arquivo installed.dat também será sincronizado, portanto, o script de login encontrará o arquivo e poderá abortar o script em vez de fazer outra instalação.

E, claro, além de verificar se isso está instalado para o usuário usando o arquivo installed.dat, você também pode verificar se ele está instalado localmente (os arquivos estão presentes em "Arquivos de Programas"?

Isso garante que, quando um usuário efetua login em um novo computador, mas com um perfil existente usando Roaming Profile, e a instalação ocorra em seu perfil, nada acontece, exceto se o programa exigido localmente não estiver instalado. / p>     

por 05.07.2016 / 20:47
0

Se você tiver o Active Directory e uma configuração limpa, poderá atribuir scripts de inicialização a Unidades organizacionais. Se você tem uma UO de usuário geral, siga estas instruções para atribuir um script de inicialização a esse grupo.

    
por 05.07.2016 / 21:08
0
  1. Se você conhece o SID do usuário, e se \HKEY_USERS\SID existir, vá para
    \HKEY_USERS\SID\Software\Microsoft\Windows\CurrentVersion
    e coloque algo em Run ou RunOnce .
  2. Coloque um arquivo em lote que se pareça
    if %username% == <the_user’s_name> (
            run the program
    )
    na pasta de inicialização do AllUsers.
por 05.07.2016 / 23:46