¿Cómo ejecutar un progtwig automáticamente como administrador en Windows 7 al inicio?

Creé mi propia aplicación de control parental para controlar la actividad de mis hijos. La única GUI de la aplicación es un ícono de la barra de tareas. El progtwig está instalado como administrador. Me gustaría que este progtwig se inicie automáticamente como usuario administrador en el inicio de Windows, para que los usuarios estándar no puedan eliminarlo del administrador de tareas.

Puedo crear una clave de registro en:

HKLM\Software\Microsoft\Windows\CurrentVersion\Run 

para hacer que se ejecute automáticamente cuando Windows se inicia. El problema es que el progtwig se inicia como el usuario registrado (estándar).

¿Cómo puedo hacer que funcione en un modo elevado? ¿Es esto posible en Win7?

Debe conectarlo al planificador de tareas, de forma que se inicie después del inicio de sesión de un usuario, utilizando una cuenta de usuario que tenga acceso administrativo en el sistema, con los privilegios más altos que se otorgan a los procesos iniciados por esa cuenta.

Esta es la implementación que se utiliza para iniciar automáticamente procesos con privilegios administrativos al iniciar sesión como un usuario ordinario.

Lo he usado para iniciar el proceso de ayuda ‘OpenVPN GUI’ que necesita privilegios elevados para funcionar correctamente y, por lo tanto, no se iniciará correctamente desde la clave de registro.

Desde la línea de comandos, puede crear la tarea a partir de una descripción XML de lo que desea lograr; así que, por ejemplo, tenemos esto, exportado desde mi sistema, que iniciaría el bloc de notas con los privilegios más altos cuando inicio sesión:

 < ?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"    

y está registrado por un símbolo del sistema del administrador usando:

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

esta respuesta realmente debería trasladarse a uno de los otros sitios stackexchange, ya que no es en realidad una cuestión de progtwigción per se.

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

Esto no es posible.
Sin embargo, puede crear un servicio que se ejecute bajo un usuario administrativo.

El servicio puede ejecutarse automáticamente al inicio y comunicarse con su aplicación existente.
Cuando la aplicación necesita hacer algo como administrador, puede solicitarle al servicio que lo haga.

Recuerde que múltiples usuarios pueden iniciar sesión a la vez.

Creo que utilizar el planificador de tareas para iniciar automáticamente progtwigs no es muy fácil de usar, y algunas veces ha tenido efectos secundarios para mí (por ejemplo, no se agrega el icono de la bandeja para un progtwig).

Para remediar esto, he creado un progtwig llamado Elevated Startup que primero se relanza con privilegios de administrador y luego lanza todos los archivos en un directorio. Como Elevated Startup ahora está elevado, todos los progtwigs que lanza también reciben privilegios de administrador. El directorio está en el menú de inicio junto al clásico directorio de inicio y funciona de manera muy similar.

Puede encontrar un cuadro de diálogo de UAC cuando el progtwig se relanza a sí mismo, según la configuración de su UAC.

Puede obtener el progtwig aquí: https://stefansundin.github.io/elevatedstartup/

Establecer la compatibilidad de su aplicación con el administrador (Run theprogram as an administrator) .

Conéctelo al task scheduler , luego apague el UAC .

Un progtwig que escribí, farmComm, puede resolver esto. Lo lancé como de código abierto y dominio público.

Si no cumple con sus criterios, puede modificarlo fácilmente para hacerlo.

farmComm:

  • Se ejecuta al iniciarse en un servicio, que continúa cuando los usuarios inician o cierran sesión.
    • En la sesión 0
    • Debajo del usuario “NT AUTHORITY \ SYSTEM”.
  • Genera procesos arbitrarios (lo eliges);
    • También en la Sesión 0
    • “Invisiblemente”, o sin mostrar ninguna interfaz de usuario / GUI
    • Con acceso a hardware de gráficos (por ejemplo, GPU).
    • Responde a la sesión activa, incluso si cambia, incluido Secure Desktop. Así es como esto:
    • Solo genera procesos después de que un usuario esté inactivo durante 8,5 minutos
    • Termina el inicio cuando un usuario reanuda desde inactivo

Los scripts fuente están disponibles aquí:

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

También debe considerar las implicaciones de seguridad de ejecutar un proceso como usuario de nivel de administrador o como Servicio. Si alguna entrada no se está validando correctamente, como si estuviera escuchando en una interfaz de red. Si el analizador para esta entrada no se valida correctamente, se puede abusar de él y posiblemente llevar a un exploit que pueda ejecutar el código como el usuario elevado. en el ejemplo de abatishchev, no debería ser un gran problema, pero si se implementara en un entorno empresarial, realice una evaluación de seguridad antes de la implementación a gran escala.

Puede hacerlo instalando la tarea mientras se ejecuta como administrador a través de la biblioteca TaskSchedler . Estoy asumiendo aquí que .NET / C # es una plataforma / lenguaje adecuado dadas las preguntas relacionadas.

Esta biblioteca le brinda acceso granular a la API del Progtwigdor de tareas, por lo que puede ajustar las configuraciones que de otra manera no se pueden establecer a través de la línea de comandos llamando a schtasks , como la prioridad del inicio. Siendo una aplicación de control parental, querrá que tenga una prioridad de inicio de 0 (máximo), que schtasks creará por defecto una prioridad de 7.

A continuación se muestra un ejemplo de código de instalación de una tarea de inicio configurada correctamente para ejecutar la aplicación deseada como administrador indefinidamente en el inicio de sesión. Este código instalará una tarea para el mismo proceso desde el que se ejecuta.

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

Creo que el planificador de tareas sería excesivo (imho). Hay una carpeta de inicio para win7.

C: \ Users \ miliu \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startup

Simplemente crea un atajo para tu autoinicio Applicaton, edita las propiedades del atajo y haz que siempre se ejecute como administrador.

Sus hijos podrían cerrarlo, por supuesto, pero si son conocedores de la tecnología siempre encuentran una manera de mantenerlo fuera. Sé que lo hice cuando era más joven.

¡Buena suerte!