2009-11-05 8 views
1

Le code suivant est dans un fichier appelé run.rb, l'idée est de lancer ruby ​​en tant qu'utilisateur différent afin que je puisse faire des tests.Créer un processus en tant qu'utilisateur dans ruby ​​

require 'rubygems' 
require 'win32/process' 

domain = 'WORLDWIDE' 
user_name = 'user' 
password = 'password' 
rubyScript = 'ruby test.rb' 
Process.create(:command_line => rubyScript, :domain => domain, :with_logon => user_name, :password => password, :close_handles => false) 

le contenu de test.rb est:

require 'rubygems' 
require 'watir' 

browser = Watir::IE.new 
browser.goto('http://localhost:44001/Users/List') 
puts browser.text 

quand je lance 'run.rb rubis' une interface de commande ouvre et ferme alors immédiatement. Des idées de ce que je fais mal ici?

+0

J'ai ajouté la balise Windows car elle limite certaines de vos options. Sur Unix, cela pourrait être accompli avec sudo. – EmFi

Répondre

0

Rétablissement d'une question morte, mais dans Windows NT, les autres utilisateurs ne peuvent pas interagir avec votre bureau. Donc, si vous êtes connecté en tant que DOMAIN\user1 et spawn un processus en tant que DOMAIN\user2, le processus DOMAIN\user2 ne peut pas interagir avec le bureau de DOMAIN\user1. Une exception à cette règle est que le processus s'exécute en tant que service et que la case "Peut interagir avec le bureau" est cochée dans les propriétés du service (mais je pense que cela doit être exécuté sous la forme SYSTEM).

Il est possible d'utiliser la stratégie de sécurité locale (secpol.msc) pour attribuer des droits utilisateur à cet utilisateur qui permet à cet utilisateur d'interagir avec les bureaux de tout le monde, mais ce serait dangereux si l'utilisateur avait le droit de se connecter de manière interactive.

+1

J'ai marqué ceci comme correct car c'est probablement la bonne réponse - mais je suis en train de travailler sur ces problèmes ne sera donc pas être en train de l'essayer maintenant :) –

0

Il est probablement en cours d'exécution de votre commande, en ouvrant une nouvelle fenêtre de commande (puisqu'il s'agit d'un nouveau processus Windows), puis en fermant cette fenêtre quand elle est terminée. Essayez de lancer un "sommeil 1000" à la fin du test.rb. Si je me trompe, que devrait garder la fenêtre autour de sorte que vous puissiez voir la sortie.

+0

Mettre dans le sommeil n'a aucun effet. Si le code avait couru, il aurait ouvert une instance d'IE que j'aurais probablement remarqué :) –

Questions connexes