iniciar - ¿Cómo ejecutar un programa automáticamente como administrador en el inicio de Windows?
ejecutar programa al iniciar windows 8 (9)
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 programa está instalado como administrador. Me gustaría que este programa 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 programa se inicia como el usuario registrado (estándar).
¿Cómo puedo hacer que funcione en un modo elevado? ¿Es esto posible en Win7?
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!
Creo que utilizar el planificador de tareas para iniciar automáticamente programas 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 programa).
Para remediar esto, he creado un programa 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 programas 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 programa se relanza a sí mismo, según la configuración de su UAC.
Puede obtener el programa aquí: https://stefansundin.github.io/elevatedstartup/
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"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2015-01-27T18:30:34</Date>
<Author>Pete</Author>
</RegistrationInfo>
<Triggers>
<LogonTrigger>
<StartBoundary>2015-01-27T18:30:00</StartBoundary>
<Enabled>true</Enabled>
</LogonTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>CHUMBAWUMBA/Pete</UserId>
<LogonType>InteractiveToken</LogonType>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>"c:/windows/system32/notepad.exe"</Command>
</Exec>
</Actions>
</Task>
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 programación per se.
Establecer la compatibilidad de su aplicación con el administrador (Run theprogram as an administrator)
.
Conéctelo al task scheduler
, luego apague el UAC
.
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.
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 Programador 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/.
*/
/// <summary>
/// Used for synchronization when creating run at startup task.
/// </summary>
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();
}
}
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.
Un programa 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í:
schtasks /create /sc onlogon /tn MyProgram /rl highest /tr "exeFullPath"