Creé mi propia aplicación de control parental para monitorear la actividad de mis hijos. La única interfaz gráfica de usuario de la aplicación es un icono de la barra de tareas. El programa se instala como administrador. Me gustaría que este programa se inicie automáticamente como usuario administrador al iniciar Windows, de modo que los usuarios estándar no puedan eliminarlo desde el administrador de tareas.
Puedo crear una clave de registro en:
HKLM\Software\Microsoft\Windows\CurrentVersion\Run
para que se ejecute automáticamente cuando se inicie Windows. El problema es que el programa se inicia como el usuario registrado (estándar).
¿Cómo puedo hacer que se ejecute en modo elevado? ¿Es esto posible en absoluto en Win7?
.login
script en Unix), no para ejecutarlo en el momento del arranque (como un/etc/rc/...
script).Respuestas:
Debe conectarlo al programador de tareas, de modo que se inicie después de que un usuario inicie sesión, utilizando una cuenta de usuario que tenga acceso administrativo al 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 procesos con privilegios administrativos al iniciar sesión como un usuario normal.
Lo he usado para iniciar el proceso auxiliar 'OpenVPN GUI' que necesita privilegios elevados para funcionar correctamente y, por lo tanto, no se iniciaría 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; entonces, 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 de administrador usando:
fuente
fuente
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 pedirle al servicio que lo haga.
Recuerde que se pueden iniciar sesión varios usuarios a la vez.
fuente
Creo que usar el programador de tareas para iniciar programas automáticamente no es muy fácil de usar y, a veces, ha tenido efectos secundarios para mí (por ejemplo, no se agrega el icono de bandeja de un programa).
Para remediar esto, he creado un programa llamado Elevated Startup que primero se reinicia con privilegios de administrador, luego lanza todos los archivos en un directorio. Dado que Elevated Startup ahora está elevado, todos los programas que lanza también tienen privilegios de administrador. El directorio está en el menú de inicio al lado del directorio de inicio clásico y funciona de manera muy similar.
Es posible que encuentre un cuadro de diálogo de UAC cuando el programa se reinicie, según la configuración de UAC.
Puede obtener el programa aquí: https://stefansundin.github.io/elevatedstartup/
fuente
Configuración de la compatibilidad de su aplicación a administrador
(Run theprogram as an administrator)
.Conéctelo
task scheduler
y apágueloUAC
.fuente
Puede hacer esto 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 sus preguntas relacionadas.
Esta biblioteca le brinda acceso granular a la API del Programador de tareas, por lo que puede ajustar configuraciones que de otro modo no podría establecer a través de la línea de comando llamando
schtasks
, como la prioridad de inicio. Al ser una aplicación de control parental, querrá que tenga una prioridad de inicio de 0 (máxima), loschtasks
que creará de forma predeterminada 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 al iniciar sesión. Este código instalará una tarea para el mismo proceso desde el que se ejecuta.
fuente
td
Gracias por señalarme en esta dirección.Un programa que escribí, farmComm, puede resolver esto. Lo publiqué como código abierto y dominio público.
Si no cumple con sus criterios, es posible que pueda modificarlo fácilmente para hacerlo.
farmComm:
Los scripts de origen están disponibles aquí:
https://github.com/r-alex-hall/farmComm
fuente
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 está escuchando en una interfaz de red. Si el analizador de esta entrada no se valida correctamente, se puede abusar de él y posiblemente conducir a un exploit que podría ejecutar 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.
fuente
Creo que el programador de tareas sería excesivo (en mi humilde opinión). Hay una carpeta de inicio para win7.
C: \ Usuarios \ miliu \ AppData \ Roaming \ Microsoft \ Windows \ Menú Inicio \ Programas \ Inicio
Simplemente cree un acceso directo para su aplicación de inicio automático, edite las propiedades del acceso directo y haga que siempre se ejecute como administrador.
Sus hijos podrían cerrarlo, por supuesto, pero si son expertos en tecnología, siempre encontrarán una manera de mantenerlo fuera. Sé que lo hice cuando era más joven.
¡Buena suerte!
fuente