se necesita para ejecutar una secuencia de comandos de rubí en modo elevado (privilegios de administrador) en Windows. ¿Es posible?Ejecutar script de rubí en modo elevado
Respuesta
Aquí es cómo hacerlo. La forma más fácil es reiniciar su ejecutable con privilegios elevados (Admin) usando ShellExecute
.
con Ruby que hacerlo de esta manera:
require 'win32ole'
shell = WIN32OLE.new('Shell.Application')
shell.ShellExecute('path_to_ruby_program', nil, nil, 'runas')
Si tiene Windows UAC activado esto le dará los familiares de Windows pop-up de diálogo que solicita privilegios de administrador. Una vez que haga clic en Sí, su proceso se ejecutará con derechos de administrador.
El truco secreto aquí es utilizar el parámetro de operación ShellExecute
no documentado runas
, que elevará la operación solicitada.
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx
También relacionado discusión sobre cómo crear manualmente un acceso directo símbolo del sistema elevado (que podría ser una buena solución en algunos casos):
http://www.sevenforums.com/tutorials/3718-elevated-command-prompt-shortcut.html
Otro método consiste en asegurarse de que no ejecute su script en modo no administrador. He encontrado que esta solución es satisfactoria en mi experiencia.
Se puede determinar si una secuencia de comandos se ejecuta en modo de administración como tal -
def running_in_admin_mode?
query_admin_mode_cmd = 'reg query "HKU\S-1-5-19"'
output, exit_status = execute_command(query_admin_mode_cmd)
exit_status == 0
end
crédito va a Peter McEvoy por su respuesta here
me gustaría dar las gracias a Casper y thegreendroid para este modificado solución.
no pude conseguir sus ejemplos se ejecuten como es así que con un toque más investigación pongo esto juntos. Hice un poco de una búsqueda de execute_command
, ya que mi instalación de ruby 1.9.3 no sabía qué hacer con ella, y no pude encontrar nada, así que utilicé los backticks. El \
tuvo que ser escapado. El bit 2>&1
es tan rubí en realidad recibe la salida en lugar de una cadena en blanco, y si esa salida coincide con la expresión regular /ERROR/
entonces usted no tiene privilegios de administrador, por lo que queremos que vuelva nil
.
Esto relanzar sí con privilegios administrativos a continuación, cargar lo que pones en el require
con el comentario después de ella.
require 'win32ole'
def running_in_admin_mode?
(`reg query HKU\\S-1-5-19 2>&1` =~ /ERROR/).nil?
end
if running_in_admin_mode?
require './main.rb' # load the actual program here.
else
path = 'rubyw.exe ' + File.expand_path(__FILE__) # optionally 'ruby.exe '
shell = WIN32OLE.new('Shell.Application')
shell.ShellExecute(path, nil, nil, 'runas')
end
que podría caer el bloque def
y cambiar el estado de if
a
if (`reg query HKU\\S-1-5-19 2>&1` =~ /ERROR/).nil?
en aras de la brevedad. También podría perder la variable shell
:
WIN32OLE.new('Shell.Application').ShellExecute(path, nil, nil, 'runas')
Posible Gotcha: Esto podría bucle infinito si running_in_admin_mode?
falla en repetidas ocasiones, pero funcionó perfectamente para mí.
La sintaxis 'ShellExecute' debe ser: ' shell.ShellExecute ("rubyw.exe", ruta, "", 'runas') ' más información se puede encontrar aquí: http://rubyonwindows.blogspot.com.es/ 2007/05/launching-apps-and-printing-docs-with.html –
Gracias a otros autores, que han venido a trabajar con este (probado en Windows 8):
Añadir esta en la parte superior de un guión de rubí:
def running_in_admin_mode?
(`reg query HKU\\S-1-5-19 2>&1` =~ /ERROR/).nil?
end
unless running_in_admin_mode?
require 'win32ole'
shell = WIN32OLE.new('Shell.Application')
shell.ShellExecute("ruby", File.expand_path(__FILE__), nil, 'runas')
exit
end
# admin rights ensured
do_something()
O simplemente podrían tener un launcher.cmd contiene
cd full\path
ruby myscript.rb
y lanzar este archivo cmd con derechos de administrador
O Una vez que haya probado con ruby, puede probar rubyw
- 1. Ejecutar proceso de elevado
- 2. Emacs: Ejecutar código en modo shell-script
- 3. Cómo ejecutar NO elevado en Vista (.NET)
- 4. cómo ejecutar el conjunto de comandos en modo elevado de powershell
- 5. Cómo ejecutar un script de PowerShell desde C# como usuario no elevado
- 6. Cómo ejecutar un proceso no elevado con Delphi2007
- 7. Emacs rubí modo de sangrado privada
- 8. Adobe InDesign .jsx script ejecutar .jsx script
- 9. Script Bash para ejecutar el script php
- 10. Ejecutar script groovy desde dentro de gradle
- 11. Ejecutar script de Python en Crontab
- 12. Ejecutar script de implementación en eclipse guardar
- 13. Ejecutar línea de comandos en WiX Script?
- 14. ¿Qué significa ejecutar PHP en modo silencioso?
- 15. ¿Cómo ejecutar RavenDb en modo incrustado?
- 16. ¿Cómo ejecutar el script tcl en otro script tcl?
- 17. ¿Ejecutar un script al desbloquear?
- 18. Ejecutar script en mac "Permiso denegado"
- 19. script PHP a ejecutar en determinados momentos
- 20. ¿Ejecutar script php antes de cada script php?
- 21. cómo ejecutar script php en eclipse
- 22. Ejecutar script sql en un esquema diferente
- 23. SqlServer está en modo de actualización de script
- 24. ¿Qué es "?" rubí en Rubí
- 25. ¿Cómo ejecutar el script de python instalado?
- 26. Mejorando el tiempo de inicio del script Scala - modo cliente?
- 27. "¿Deja de ejecutar este script?" error
- 28. Ejecutar aplicaciones de iPhone en modo de suspensión
- 29. Ejecutar un script de PowerShell desde otro
- 30. ¿Cómo ejecutar comandos de script desde variables?
Abra una terminal (cmd.exe) con privilegios de administrador y ejecute ruby desde allí? – Casper
Sí, esa es una forma de elevar cualquier cosa ¿no? Necesito una forma en que mi guión ruby se eleve a sí mismo. Obviamente, Windows le pedirá una contraseña de administrador, eso está bien para mí. –