307 messaggi dal 13 luglio 2005
Ciao a tutti,
avrei la necessita' di lanciare un eseguibile da un webservice. Mi spiego meglio.
Per poter interrogare un server DHCP (vedere gli IP assegnati o altro) ho pensato di usare l'eseguibile "NetSh" (ho gia' provato con dhcpmanagement.dll con scarsi risultati), ma come fare? Puo' un webservice fare questo? Devo creare prima una windows application e poi chiamarla dal webservice? ... non so da dove cominciare ...

Qualcuno ha un'alternativa del tutto diversa?

Grazie e saluti a tutti.

Umb
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
sì, puoi invocare un eseguibile da webservice ospitato in IIS usando Process.Start, purché l'utente con cui sta andando in esecuzione l'applicazione ASP.NET disponga dei necessari privilegi per lanciare quel comando.

Puoi verificare di quale utente si tratta dalle proprietà avanzate dell'application pool, oppure controllando il processo w3wp.exe nel task manager.
http://www.iis.net/learn/manage/configuring-security/application-pool-identities

Se non vuoi concedere quei privilegi all'utente, perché temi che un'eventuale intrusione da parte di terzi possa causare l'esecuzione di altri eseguibili sulla macchina, allora puoi organizzarti diversamente. Potresti predisporre un servizio per Windows che esponga un servizio WCF e che consumerai dall'applicazione ASP.NET. In quel servizio predisporrai una service operation che si occuperà di mandare in esecuzione NetSh e restituire il risultato.

In alternativa a NetSh, vedi se ti può essere utile una di queste cmdlets PowerShell.
https://technet.microsoft.com/it-it/library/jj590751.aspx

ciao,
Moreno

Enjoy learning and just keep making
307 messaggi dal 13 luglio 2005
Ciao,
ti ringrazio per la risposta. Cerchero' di approfondire l'argomento partendo dai tuoi consigli.
Il problema piu' grave di questo approccio rimane quello del controllo sull'esito dell'operazione, ovvero: io lancio il comando, ma avra' funzionato? c'e' stato un errore? e quale errore?

Grazie ancora, ciao.

Umb
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
la classe Process dispone anche di eventi che vengono sollevati quando l'eseguibile produce dell'output e degli errori.
https://msdn.microsoft.com/it-it/library/system.diagnostics.process_events(v=vs.110).aspx

Ti sono utili per capire quale sia la "risposta" dell'eseguibile.
Ti incollo un pezzo di codice da cui puoi partire.
'Creo un'istanza del processo che sto per lanciare e ne inizializzo le proprietà
Dim process As New Process()
With process.StartInfo
    .FileName = percorsoFileEseguibile
    .Arguments = argomenti
    .UseShellExecute = False
End With
'Gestisco gli eventi che mi consentono di leggere l'output
AddHandler process.OutputDataReceived, AddressOf LeggiOutput
AddHandler process.ErrorDataReceived, AddressOf LeggiErrore
'Avvio il processo
process.Start()


E questi sono i due gestori evento
Private Sub LeggiOutput(sendingProcess As Object, outputLine As DataReceivedEventArgs)
    'outputLine è la riga scritta dal programma
End Sub

Private Sub ScriviErrore(sendingProcess As Object, errLine As DataReceivedEventArgs)
    'errLine è la riga di errore scritta dal programma
End Sub


Ricorda che l'utente dell'application pool deve avere sufficienti privilegi per poter mandare in esecuzione il programma. Inoltre, il sito deve girare in Full Trust.

ciao,
Moreno
Modificato da BrightSoul il 23 aprile 2015 19.53 -

Enjoy learning and just keep making
1.495 messaggi dal 27 dicembre 2005
In che modo un eseguibile può scrivere un flusso di errore o output ?

Forse applicazioni console ?
11.886 messaggi dal 09 febbraio 2002
Contributi
Sì, esatto. Tipicamente i flussi di output e di errore vengo scritti da applicazioni da riga di comando come NetSh.

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.