Como executar um programa automaticamente como admin no Windows 7 na boot?

Eu criei meu próprio aplicativo de controle dos pais para monitorar a atividade de meus filhos. A única GUI do aplicativo é um ícone da barra de tarefas. O programa é instalado como admin. Eu gostaria que este programa fosse iniciado automaticamente como usuário admin na boot do Windows, para que os usuários padrão não possam eliminá-lo do gerenciador de tarefas.

Eu posso criar uma chave de registro em:

HKLM\Software\Microsoft\Windows\CurrentVersion\Run 

para executá-lo automaticamente quando o Windows é iniciado. O problema é que o programa é iniciado como o usuário logado (padrão).

Como posso executá-lo em um modo elevado? Isso é possível em tudo no Win7?

É necessário conectá-lo ao agendador de tarefas, de modo que ele seja iniciado após o login de um usuário, usando uma conta de usuário que tenha access administrativo no sistema, com os privilégios mais altos que são concedidos aos processos iniciados por essa conta.

Essa é a implementação usada para iniciar automaticamente processos com privilégios administrativos ao efetuar login como um usuário comum.

Eu usei-o para lançar o processo auxiliar ‘OpenVPN GUI’, que precisa de privilégios elevados para funcionar corretamente e, portanto, não seria iniciado corretamente a partir da chave do Registro.

Na linha de comando, você pode criar a tarefa a partir de uma descrição XML do que deseja realizar; Então, por exemplo, temos isso, exportado do meu sistema, que iria iniciar o bloco de notas com os maiores privilégios quando eu logar:

 < ?xml version="1.0" encoding="UTF-16"?>   2015-01-27T18:30:34 Pete    2015-01-27T18:30:00 true     CHUMBAWUMBA\Pete InteractiveToken HighestAvailable    IgnoreNew false false true false false  true false  true true false false false PT0S 7    "c:\windows\system32\notepad.exe"    

e é registrado por um prompt de comando do administrador usando:

 schtasks /create /tn "start notepad on login" /xml startnotepad.xml 

Esta resposta deve realmente ser transferida para um dos outros sites do stackexchange, já que não é realmente uma questão de programação em si.

 schtasks /create /sc onlogon /tn MyProgram /rl highest /tr "exeFullPath" 

Isso não é possível.
No entanto, você pode criar um serviço que seja executado sob um usuário administrativo.

O serviço pode ser executado automaticamente na boot e se comunicar com o aplicativo existente.
Quando o aplicativo precisa fazer algo como um administrador, ele pode solicitar que o serviço faça isso.

Lembre-se que vários usuários podem estar conectados ao mesmo tempo.

Eu acho que usar o agendador de tarefas para autostart programas não é muito amigável, e às vezes tem efeitos colaterais para mim (por exemplo, o ícone da bandeja para um programa não é adicionado).

Para remediar isso, criei um programa chamado Elevated Startup que primeiro se relança com privilégios de administrador, depois lança todos os arquivos em um diretório. Como a Elevação de Inicialização está agora elevada, todos os programas que ela lança também recebem privilégios de administrador. O diretório está no menu Iniciar, próximo ao diretório de boot clássico, e funciona da mesma forma.

Você pode encontrar uma checkbox de diálogo do UAC quando o programa for reiniciado, dependendo das configurações do seu UAC.

Você pode obter o programa aqui: https://stefansundin.github.io/elevatedstartup/

Configurando a compatibilidade do seu aplicativo para o administrador (Run theprogram as an administrator) .

Conecte-o ao task scheduler e desligue o UAC .

Um programa que escrevi, farmComm, pode resolver isso. Eu lancei como código aberto e domínio público.

Se ele não atender aos seus critérios, você poderá alterá-lo facilmente para fazê-lo.

farmComm:

  • É executado no boot sob um serviço, que continua quando os usuários fazem login ou logout.
    • Na session 0
    • Sob o usuário “NT AUTHORITY \ SYSTEM”.
  • Gera processos arbitrários (você escolhe);
    • Também na session 0
    • “Invisibly” ou sem mostrar qualquer interface do usuário / GUI
    • Com access a hardware gráfico (por exemplo, GPUs).
    • Responde à session ativa, mesmo que seja alterada, incluindo o Secure Desktop. É assim:
    • Apenas gera processos após um usuário ficar ocioso por 8,5 minutos
    • Termina o spawns quando um usuário sai da inatividade

Os scripts de origem estão disponíveis aqui:

https://github.com/r-alex-hall/farmComm

Você também deve considerar as implicações de segurança da execução de um processo como usuário de nível de administrador ou como Serviço. Se alguma input não estiver sendo validada corretamente, por exemplo, se estiver ouvindo em uma interface de rede. Se o analisador para essa input não for validado corretamente, ele poderá sofrer abuso e possivelmente levar a uma exploração que poderia executar código como o usuário elevado. no exemplo do abatishchev, isso não deve ser um grande problema, mas se fosse implantado em um ambiente corporativo, faça uma avaliação de segurança antes da implantação em larga escala.

Você pode fazer isso instalando a tarefa durante a execução como administrador por meio da biblioteca TaskSchedler . Estou assumindo aqui que o .NET / C # é uma linguagem / plataforma adequada, dadas as suas questões relacionadas.

Essa biblioteca oferece access granular à API do Agendador de Tarefas, para que você possa ajustar configurações que não podem ser definidas por meio da linha de comando chamando schtasks , como a prioridade da boot. Sendo um aplicativo de controle parental, você desejará que ele tenha uma prioridade de boot de 0 (máximo), que schtasks criará, por padrão, uma prioridade de 7.

Abaixo está um exemplo de código de instalação de uma tarefa de boot configurada corretamente para executar o aplicativo desejado como administrador indefinidamente no logon. Este código irá instalar uma tarefa para o processo que está sendo executado.

 /* Copyright © 2017 Jesse Nicholson This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. */ ///  /// Used for synchronization when creating run at startup task. ///  private ReaderWriterLockSlim m_runAtStartupLock = new ReaderWriterLockSlim(); public void EnsureStarupTaskExists() { try { m_runAtStartupLock.EnterWriteLock(); using(var ts = new Microsoft.Win32.TaskScheduler.TaskService()) { // Start off by deleting existing tasks always. Ensure we have a clean/current install of the task. ts.RootFolder.DeleteTask(Process.GetCurrentProcess().ProcessName, false); // Create a new task definition and assign properties using(var td = ts.NewTask()) { td.Principal.RunLevel = Microsoft.Win32.TaskScheduler.TaskRunLevel.Highest; // This is not normally necessary. RealTime is the highest priority that // there is. td.Settings.Priority = ProcessPriorityClass.RealTime; td.Settings.DisallowStartIfOnBatteries = false; td.Settings.StopIfGoingOnBatteries = false; td.Settings.WakeToRun = false; td.Settings.AllowDemandStart = false; td.Settings.IdleSettings.RestartOnIdle = false; td.Settings.IdleSettings.StopOnIdleEnd = false; td.Settings.RestartCount = 0; td.Settings.AllowHardTerminate = false; td.Settings.Hidden = true; td.Settings.Volatile = false; td.Settings.Enabled = true; td.Settings.Compatibility = Microsoft.Win32.TaskScheduler.TaskCompatibility.V2; td.Settings.ExecutionTimeLimit = TimeSpan.Zero; td.RegistrationInfo.Description = "Runs the content filter at startup."; // Create a trigger that will fire the task at this time every other day var logonTrigger = new Microsoft.Win32.TaskScheduler.LogonTrigger(); logonTrigger.Enabled = true; logonTrigger.Repetition.StopAtDurationEnd = false; logonTrigger.ExecutionTimeLimit = TimeSpan.Zero; td.Triggers.Add(logonTrigger); // Create an action that will launch Notepad whenever the trigger fires td.Actions.Add(new Microsoft.Win32.TaskScheduler.ExecAction(Process.GetCurrentProcess().MainModule.FileName, "/StartMinimized", null)); // Register the task in the root folder ts.RootFolder.RegisterTaskDefinition(Process.GetCurrentProcess().ProcessName, td); } } } finally { m_runAtStartupLock.ExitWriteLock(); } } 

Eu acho que o agendador de tarefas seria um exagero (imho). Existe uma pasta de boot para o win7.

C: \ Usuários \ miliu \ AppData \ Roaming \ Microsoft \ Windows \ Menu Iniciar \ Programas \ Inicialização

Basta criar um atalho para o seu aplicativo de início automático, editar as propriedades do atalho e executá-lo sempre como administrador.

Seus filhos podem fechar, é claro, mas se eles são especialistas em tecnologia, eles sempre encontrarão uma maneira de mantê-lo fora. Eu sei que eu fiz quando eu era mais jovem.

Boa sorte!