Riavviare pc da remoto in vb.net 2003

lunedì 19 aprile 2010 - 10.28

basicdany Profilo | Expert

ciao a tutti, dovrei da remoto riavviare un pc in rete e possibile farlo tramite codice vb, tengo a precisare che sulla macchina remota non c'e un applicazione vb, ma e presente solo sul pc server

grazie.

freeteo Profilo | Guru

Ciao,
secondo me devi passare tramite il programma "ShutDown" di windows, in particolare se lo lanci dal tuo prompt con "/?" ti dice l'help relativo ai parametri da passargli.
Sintassi: shutdown [/i | /l | /s | /r | /g | /a | /p | /h | /e] [/f] [/m \\computer][/t xxx][/d [p|u:]xx:yy [/c "commento"]]

Da .net lo lanci quindi con la classe "Process.Start(...)" chiaramente e passi i vari parametri come il nome del computer da riavviare e magari /f (force) che così ti butta giù tutto senza chiedere salvataggi in sospeso...etc...cmq guarda l'help di quel comando perchè "è rischioso"...


Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

basicdany Profilo | Expert

ciao, avevo gia provato cosi , ma non funziona!, funziona solo se voglio riavviare il pc locale e non quello remoto:

Dim P As New Process
Dim s As New ProcessStartInfo("shutdown", " -r -m \\DANIELE2 -t 20")
s.UseShellExecute = False
s.CreateNoWindow = True
s.RedirectStandardOutput = True
s.RedirectStandardError = True
P = New Process
P.StartInfo = s
P.Start()
P.EnableRaisingEvents = True
AddHandler P.Exited, AddressOf SendComplete

Il pc chiaramente e in rete riesco a entrare nella cartelle tranquillamente.

grazie

freeteo Profilo | Guru

Ciao,
ma da prompt di dos, se lanci il comando che riavvii quel pc, funziona?
Per capire qual'è il problema...se riesci a farlo da dos devi riuscire anche dalla classe Process, visto che cmq non fa altro che fare una ShellExecute del comando...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

basicdany Profilo | Expert

avevo gia provato in dos, non funziona mi da l'elenco dei comandi come se richiedessi help quando digito il comando, non vorrei che il comando sia sbagliato:
shutdown -r -m \\DANIELE1 -t 20



ecco perche cercavo un altro modo

ciao grazie

freeteo Profilo | Guru

ciao,
ma l'help parla di una "/" non di un "-" prima del parametro, sicuro che non sia quello il tuo problema?
Quindi il tuo comando sarebbe:
shutdown /r /m \\DANIELE1 /T 20

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

Cimperiali Profilo | Newbie

en passant, non ho guardato se le singole operazioni foìssero corrette o meno, però la sequenza non torna.
Prova così:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

basicdany Profilo | Expert

ciao, un passo avanti l'abbiavo fatto ora mi da accesso negato con questo comando : shutdown /r /m \\DANIELE2 /T 20
e non piu l'elenco dei comandi.

c'e qualcosa che non va!

grazie

basicdany Profilo | Expert

ciao, come passo la utente e password?? anche se non credo si quelloil problema:

'qui secondo me devi aggiungere Utente e Pwd (e magari anche dominio ) con sufficienti privilegi per fare
'uno shutdown da reomoto
Dim s As New ProcessStartInfo("shutdown", " /r /m \\DANIELE1 /T 20")


s.UseShellExecute = False
s.CreateNoWindow = True

'il redirect dello standardOutput a me spesso dà problemi (tipo che dall'altra parte non si muove più niente finchè non lo libero)
s.RedirectStandardOutput = True

s.RedirectStandardError = True

Dim P As Process 'niente new qui, se la fai dopo
P = New Process 'sennò togli questa riga
P.EnableRaisingEvents = True
AddHandler P.Exited, AddressOf SendComplete
P.StartInfo = s

P.Start()

grazie

Cimperiali Profilo | Newbie

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo_properties(VS.90).aspx
s è di tipo ProcessStartInfo, e tale tipo espone anche tre proprietà che sono Password, Username e Domain
da Msdn:
[quote]Setting the Domain, UserName, and the Password properties in a ProcessStartInfo object is the recommended practice for starting a process with user credentials.[/quote]

basicdany Profilo | Expert

ciao, io uso framework 1.1 e non supporta tale propriera la classe "ProcessStartInfo"
puoi aiutarmi?

grazie

Cimperiali Profilo | Newbie

allora l'unico modo che hai di farlo è quello di trovare il modo di passare user e pwd anche da dos, e quindi aggiungere tale sintassi al tuo comando...
per esempio, puoi vedere se ti riesce di usare schtasks (scheduled task via dos) :
Syntax
schtasks /create /tn TaskName /tr TaskRun /sc schedule [/mo modifier] [/d day] [/m month[,month...] [/i IdleTime] [/st StartTime] [/sd StartDate] [/ed EndDate] [/s computer [/u [domain\]user /p password]] [/ru {[Domain\]User | "System"} [/rp Password]] /?

Lo trovi qui:
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds.mspx?mfr=true

basicdany Profilo | Expert

ciao, grazie per la risposta, avrei bisogno di qualche post o esempio per capire come fare, tengo a precisare che dovrei riavviare un pc in una rete locale.

grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5