Menú contextual múltiple ejecutado como administrador a través del editor de registro

0

Estoy tratando de crear dos menús contextuales para archivos .EXE en Windows 8, los cuales necesitarán privilegios de administrador. Como puedo ver en el registro, HKEY_CLASSES_ROOT \ exefile \ shell \ runas solo puede tener un comando y lo está utilizando el menú contextual "Ejecutar como administrador". En este momento, estoy usando este código en un archivo .reg:

[HKEY_CLASSES_ROOT\exefile\shell\Low Priority Run]
"HasLUAShield"=""
"MUIVerb"="&Low Resource Start"

[HKEY_CLASSES_ROOT\exefile\shell\Low Priority Run\command]
@="cmd.exe /c start /low /affinity 2 \"\" \"%1\""

[HKEY_CLASSES_ROOT\exefile\shell\Boost Application]
"HasLUAShield"=""
"MUIVerb"="&Boost Application"

[HKEY_CLASSES_ROOT\exefile\shell\Boost Application\command]
@="cmd.exe /c start /realtime \"\" \"%1\""

El indicador HasLUAShield parece mostrar solo un escudo elegante y no está elevando mi comando para ejecutarlo como administrador.

¿Por qué quiero que se ejecuten como administrador? Porque cuando no se ejecuta como administrador, no se otorga la prioridad "en tiempo real", sino que solo se asigna prioridad "alta" al exe en el menú de la aplicación Boost. Y en el Inicio de recursos bajos también, los archivos exe contenidos en (por ejemplo, la carpeta Archivos de programa) se ejecutan de manera normal (ni siquiera de baja prioridad, ni afinidad de CPU 1).

Además, noté en algunas entradas de "comando" en el registro, hay un% * al final. ¿Qué significa eso?

Ajay Raghav
fuente
HasLUAShieldNo se eleva. Simplemente dice que quieres la decoración. Si quieres elevar, entonces debes hacerlo tú mismo, por ejemplo, llamando ShellExecuteExcon el runasverbo.
% * es un lote para "todos los argumentos de la línea de comandos"
@RaymondChen, ¿significa que es imposible lo que estoy intentando sin usar / crear otro programa para manejarlo? Porque preferiría ralentizar el inicio del programa en el menú Boost Application.
@ PeterWright, gracias. Eso significa que% * simplemente transferiría los argumentos pasados ​​al archivo original que se inicia.
StackOverflow es para problemas de programación. Si no quieres hacer programación, prueba Superuser.

Respuestas:

0

Hola, me las arreglé para solucionar este problema tuyo:

  1. Crea una copia de cmd.exenamed cmd1.exe. Ve con ambos C:\Windows\System32y C:\Windows\SysWOW64.
  2. En la Compatibilitypestaña de la cmd1.exe, compruebe Run this program as an administratoren el Propertiesmenú.
  3. Cambie las claves de registro suyas de cmd.exea cmd1.exe.
  4. Ejecute un programa a través del contexto de su aplicación Boost y aparecerá una confirmación de UAC y listo. Supongo que debe haber un comando o argumento que pueda usar, pero esta es una buena manera de evitar su problema sin esfuerzo. Funcionó bien en mi máquina VM con Windows 8.1.
AperiV
fuente