Come eseguire automaticamente un programma come amministratore su Windows 7 all’avvio?

Ho creato la mia app di controllo parentale per monitorare l’attività dei miei figli. L’unica GUI dell’app è un’icona della barra delle applicazioni. Il programma è installato come amministratore. Mi piacerebbe che questo programma venisse avviato automaticamente come utente amministratore all’avvio di Windows, in modo che gli utenti standard non possano ucciderlo dal task manager.

Posso creare una chiave di registro a:

HKLM\Software\Microsoft\Windows\CurrentVersion\Run 

per farlo funzionare automaticamente all’avvio di Windows. Il problema è che il programma viene avviato come utente registrato (standard).

Come posso farlo funzionare in una modalità elevata? Questo è ansible in Win7?

È necessario collegarlo all’utilità di pianificazione, in modo tale che venga avviato dopo l’accesso di un utente, utilizzando un account utente con accesso amministrativo sul sistema, con i privilegi più elevati consentiti ai processi avviati da tale account.

Questa è l’implementazione utilizzata per l’avvio automatico dei processi con privilegi amministrativi quando si accede come un utente normale.

L’ho usato per avviare il processo helper ‘OpenVPN GUI’ che ha bisogno di privilegi elevati per funzionare correttamente, e quindi non si avvierebbe correttamente dalla chiave di registro.

Dalla riga di comando, è ansible creare l’attività da una descrizione XML di ciò che si desidera realizzare; per esempio, abbiamo questo, esportato dal mio sistema, che avvierebbe il blocco note con i privilegi più alti quando effettuo l’accesso:

    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"    

ed è registrato da un prompt dei comandi dell’amministratore usando:

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

questa risposta dovrebbe davvero essere spostata su uno degli altri siti di stackexchange, in quanto non è in realtà una domanda di programmazione di per sé.

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

Non è ansible.
Tuttavia, è ansible creare un servizio che viene eseguito con un utente amministrativo.

Il servizio può essere eseguito automaticamente all’avvio e comunicare con l’applicazione esistente.
Quando l’applicazione deve fare qualcosa come amministratore, può chiedere al servizio di farlo per esso.

Ricorda che è ansible accedere a più utenti contemporaneamente.

Penso che utilizzare l’utilità di pianificazione per l’avvio automatico dei programmi non sia molto intuitivo e talvolta ha avuto effetti collaterali (ad es. L’icona della barra delle applicazioni per un programma non è stata aggiunta).

Per rimediare, ho creato un programma chiamato Elevated Startup che si rilancia per la prima volta con i privilegi di amministratore, quindi avvia tutti i file in una directory. Poiché Elevated Startup è ora elevato, tutti i programmi che viene avviato hanno anche i privilegi di amministratore. La directory si trova nel menu di avvio accanto alla classica directory di avvio e funziona molto allo stesso modo.

È ansible che si verifichi una finestra di dialogo UAC quando il programma si riavvia da solo, a seconda delle impostazioni del controllo dell’account utente.

Puoi ottenere il programma qui: https://stefansundin.github.io/elevatedstartup/

Impostazione della compatibilità dell’applicazione all’amministratore (Run theprogram as an administrator) .

Collegalo task scheduler , quindi distriggers il UAC .

Un programma che ho scritto, farmComm, può risolvere questo problema. L’ho rilasciato come open-source e Public Domain.

Se non soddisfa i tuoi criteri, potresti essere in grado di modificarlo facilmente.

farmComm:

  • Viene eseguito all’avvio sotto un servizio, che continua quando gli utenti eseguono il login o l’uscita.
    • In sessione 0
    • Sotto l’utente “NT AUTHORITY \ SYSTEM.”
  • Genera processi arbitrari (a scelta);
    • Anche in sessione 0
    • “Invisibile” o senza mostrare alcuna interfaccia utente / GUI
    • Con accesso all’hardware grafico (ad es. GPU).
    • Risponde alla sessione triggers, anche se cambia, incluso Secure Desktop. Ecco come:
    • Genera i processi solo dopo che un utente è inattivo per 8.5 minuti
    • Termina spawn quando un utente riprende da inattivo

Gli script di origine sono disponibili qui:

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

È inoltre necessario considerare le implicazioni sulla sicurezza di eseguire un processo come utente a livello di amministratore o come servizio. Se qualsiasi input non viene validato correttamente, ad esempio se è in ascolto su un’interfaccia di rete. Se il parser per questo input non si convalida correttamente, può essere abusato e può portare a un exploit che potrebbe eseguire codice come utente con privilegi elevati. nell’esempio di abatishchev non dovrebbe essere un grosso problema, ma se dovesse essere implementato in un ambiente aziendale, fare una valutazione della sicurezza prima di una distribuzione su larga scala.

È ansible farlo installando l’attività mentre è in esecuzione come amministratore tramite la libreria TaskSchedler . Suppongo qui che .NET / C # sia una piattaforma / lingua adatta alle tue domande correlate.

Questa libreria offre un accesso granulare all’API schtasks pianificazione, in modo da poter regolare le impostazioni che non è ansible impostare tramite la riga di comando, chiamando schtasks , ad esempio la priorità dell’avvio. Essendo un’applicazione di controllo parentale, vorrai avere una priorità di avvio pari a 0 (massima), che schtasks creerà per impostazione predefinita una priorità di 7.

Di seguito è riportato un esempio di codice di installazione di un’attività di avvio configurata correttamente per eseguire l’applicazione desiderata come amministratore a tempo indeterminato all’accesso. Questo codice installerà un’attività per lo stesso processo da cui è in esecuzione.

 /* 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(); } } 

Penso che il task scheduler sarebbe eccessivo (imho). C’è una cartella di avvio per win7.

C: \ Users \ miliu \ AppData \ Roaming \ Microsoft \ Windows \ Menu Avvio \ Programmi \ Esecuzione automatica

Basta creare una scorciatoia per l’applicazione automatica Applicaton, modificare le proprietà del collegamento e farlo funzionare sempre come amministratore.

I tuoi bambini potrebbero chiuderlo ovviamente, ma se sono esperti di tecnologia trovano sempre un modo per tenerti fuori. So che l’ho fatto quando ero più giovane.

In bocca al lupo!