Muszę uruchomić skrypt ruby w trybie podwyższonym (uprawnienia administratora) w systemie Windows. Czy to możliwe?Uruchom skrypt ruby w trybie podwyższonym
Odpowiedz
Oto jak to zrobić. Najprostszym sposobem jest ponowne uruchomienie pliku wykonywalnego z uprawnieniami wyższymi (Admin) przy użyciu ShellExecute
.
z Ruby to zrobić tak:
require 'win32ole'
shell = WIN32OLE.new('Shell.Application')
shell.ShellExecute('path_to_ruby_program', nil, nil, 'runas')
Jeśli masz włączone UAC w systemie Windows to daje znajome systemu Windows pojawi się okno dialogowe, które żąda uprawnienia administratora. Po kliknięciu "Tak" proces zostanie uruchomiony z uprawnieniami administratora.
Ta tajemna sztuczka polega na użyciu nieudokumentowanego parametru ShellExecute
, który podniesie żądaną operację.
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx
związane także dyskusję na temat ręcznego tworzenia podwyższonej wiersza polecenia skrótu (który może być na tyle dobrym rozwiązaniem w niektórych przypadkach):
http://www.sevenforums.com/tutorials/3718-elevated-command-prompt-shortcut.html
Inną metodą jest zapewnienie Państwu nie uruchamiaj skryptu w trybie nieadministracyjnym. Z mojego doświadczenia wynika, że to rozwiązanie jest satysfakcjonujące.
Można określić, czy skrypt jest uruchomiony w trybie administratora jak tak -
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
zasługa Peter McEvoy na jego odpowiedź here
Chciałbym podziękować Casper i thegreendroid za to zmodyfikowana rozwiązanie.
Nie mogłem uruchomić ich przykładów tak, jak jest, więc przy odrobinie więcej badań poskładałem to razem. Zrobiłem trochę wyszukiwania dla execute_command
, ponieważ moja instalacja Ruby 1.9.3 nie wiedziała, co z tym zrobić i nie mogłem nic znaleźć, więc użyłem backtików. \
trzeba było uciec. Bit 2>&1
jest tak, że ruby faktycznie pobiera dane wyjściowe zamiast pustego łańcucha, a jeśli to wyjście jest zgodne z Regexpem /ERROR/
, to nie masz uprawnień administratora, więc chcemy, aby powrócił on nil
.
To ponownie uruchomi się z uprawnieniami administracyjnymi, a następnie załaduje wszystko, co umieścisz w require
z komentarzem po nim.
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
Ty może spaść blok def
i zmienić oświadczenie if
do
if (`reg query HKU\\S-1-5-19 2>&1` =~ /ERROR/).nil?
dla zwięzłości. Również można stracić shell
zmiennej:
WIN32OLE.new('Shell.Application').ShellExecute(path, nil, nil, 'runas')
Możliwa Gotcha: To może nieskończoną pętlę jeśli running_in_admin_mode?
nie wielokrotnie, ale to działało idealnie dla mnie.
Składnia 'ShellExecute' powinna być: ' shell.ShellExecute ("rubyw.exe", ścieżka, "", "runas") ' więcej informacji można znaleźć tutaj: http://rubyonwindows.blogspot.com.es/ 2007/05/launching-apps-and-printing-docs-with.html –
Dzięki innych autorów, mam przyjść do pracy z tym (testowane na Windows 8):
Dodaj ten na górze skryptu Ruby
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()
Lub może po prostu trzeba launcher.cmd zawierający
cd full\path
ruby myscript.rb
i uruchomić ten plik cmd z prawami administratora
O nce przetestowałeś z ruby możesz spróbować rubyw
- 1. Skrypt uruchom/uruchom skrypt php z parametrami
- 2. Uruchom skrypt ruby w tle bez używania ekranu
- 3. Uruchom skrypt przy odblokowywaniu?
- 4. Uruchom Chrome w trybie okienkowym z kioskami
- 5. Uruchom skrypt mongodb, aby wstawić początkowe dane.
- 6. połączeń skrypt python, ruby
- 7. Uruchom ruby-debug na Heroku
- 8. uruchom skrypt Pythona jako serwer cgi apache
- 9. Uruchom skrypt z pytona z uprawnieniami
- 10. Uruchom skrypt PowerShell z instalatora WiX
- 11. Uruchom skrypt bash ze skryptu R
- 12. Julia - uruchom skrypt i utrzymuj tłumacza.
- 13. Uruchom skrypt powłoki z Java Synchronously
- 14. Emacs wcięcie w trybie ruby prywatne
- 15. Sinatra: uruchom kod ruby po kliknięciu adresu URL
- 16. Uruchom skrypt powłoki dla każdego pliku w katalogu
- 17. dokowanie uruchom skrypt powłoki w tle bez zamykania kontenera
- 18. skrypt wsadowy - uruchom polecenie dla każdego pliku w katalogu
- 19. Uruchom skrypt Powershell, który działa w ramach kontroli źródła TFS
- 20. Uruchom skrypt programu Power Shell w tle raz na minutę.
- 21. Nie widzę mojego makra VBA w polu wyboru "Uruchom skrypt"
- 22. Uruchom projekt sbt w trybie debugowania z niestandardową konfiguracją
- 23. Uruchom ekran powitalny w trybie poziomym dla iPhone 5
- 24. Python - Uruchom Firefoksa z selenem w trybie prywatnym
- 25. Zacznij zakaz podwyższone proces z podwyższonym procesu
- 26. Monitoring Ruby skrypt, używając Monit - Łącznie RVM
- 27. Jeśli przeglądarka to Internet Explorer: uruchom alternatywny skrypt zamiast:
- 28. Ponownie uruchom skrypt Pythona z poziomu samego siebie.
- 29. Uruchom (zdalny) skrypt php z (lokalnego) skryptu pythonowego
- 30. Uruchom instalację pakietu w Ruby on Rails nowy projekt
Otwórz terminal (cmd.exe) z uprawnieniami administratora i uruchom stamtąd ruby? – Casper
Tak, to sposób na podniesienie czegokolwiek, prawda? Potrzebuję sposobu, w jaki mój rubinowy skrypt podnosi się. Oczywiście Windows poprosi o hasło administratora, to jest dla mnie ok. –