AIUTO eseguire file .bat in rete

venerdì 18 luglio 2008 - 11.33

giucorn Profilo | Junior Member

Ciao a tutti,
mi servirebbe eseguire un file .bat situata nella rete. Mi spiego meglio:
Dispongo di un WEBSERVER con su Windows XP Pro e IIS istallati;
ho creato una Button in una pagina aspx con il seguente codice

Dim WshShell
Dim User_Corrente As String = UCase(Session.Item("User"))
WshShell = CreateObject("WScript.Shell")
WshShell.Run("\\WEBSERVER\Cartella_Prova\message.bat", 1)
WshShell = Nothing

Nel file message.bat ho scritto semplicemente x prova Calc.exe, questo per far aprire la calc di windows.

In locale funziona tutto, una volta pubblicato se clicco sul button non succede niente.

In cosa sbaglio?

Grazie in anticipo

rossimarko Profilo | Guru

>Ciao a tutti,
Ciao

>mi servirebbe eseguire un file .bat situata nella rete.
>Mi spiego meglio:
>Dispongo di un WEBSERVER con su Windows XP Pro e IIS istallati;
>ho creato una Button in una pagina aspx con il seguente codice
>
> Dim WshShell
>Dim User_Corrente As String = UCase(Session.Item("User"))
> WshShell = CreateObject("WScript.Shell")
>WshShell.Run("\\WEBSERVER\Cartella_Prova\message.bat", 1)
> WshShell = Nothing
>
>Nel file message.bat ho scritto semplicemente x prova Calc.exe,
>questo per far aprire la calc di windows.
>

Questo codice è agganciato al click lato client giusto?


-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

giucorn Profilo | Junior Member

In che senso?

rossimarko Profilo | Guru

>In che senso?

Quando inserisci un bottone in una pagina web puoi associargli due tipologie di eventi click:
- quello lato client: agganci un javascript o un vbscript per explorer da eseguire direttamente all'interno del browser
- quello lato server: la pagina effettua un post su server dove tu puoi eseguire del codice

Se la chiamata al bat la fai lato client allora, considerando il tuo bat attuale, la calcolatrice sul client e l'utente potrà vederla, ma se la esegui lato server l'utente non vedrà assolutamente niente.
La scelta di usare una soluzione o l'altra dipende dal risultato che ti aspetti. Ovvimente se fai una prova sullo stesso pc, quindi browser e webserver sulla stessa macchina vedrai i risultati della chiamata anche se la effettui lato server, ma semplicemente perchè hai tutto sul tuo pc. In un ambiente di produzione il webserver è su un'altra macchina.

Puoi descriverci che cosa vorresti fare con il bat che lanci?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

giucorn Profilo | Junior Member

<<Quando inserisci un bottone in una pagina web puoi associargli due tipologie di eventi click:
- quello lato client: agganci un javascript o un vbscript per explorer da eseguire direttamente all'interno del browser
- quello lato server: la pagina effettua un post su server dove tu puoi eseguire del codice

Se la chiamata al bat la fai lato client allora, considerando il tuo bat attuale, la calcolatrice sul client e l'utente potrà vederla, ma se la esegui lato server l'utente non vedrà assolutamente niente.>>

Infatti, pubblicando il sito, aprendolo come http//localhost/AppProva, quindi lato server non vedo nulla, clicco sul bottone e non esegue nulla.

<<Puoi descriverci che cosa vorresti fare con il bat che lanci?>>
Io devo realizzarlo lato server, questa è un bat di prova, che apre un'applicazione semplice che è il Calc.

rossimarko Profilo | Guru

>Io devo realizzarlo lato server, questa è un bat di prova, che
>apre un'applicazione semplice che è il Calc.

Per lanciare un bat allora usa il metodo Process.Start del framework: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.start.aspx

Devi poi verificare di avere i permessi per lanciare il bat ed eventualmente richiama un processo che fa la copia di un file invece che la calcolatrice, così riesci a verificare meglio che sia stato eseguito correttamente.

Un link che potrebbe esserti utile: http://support.microsoft.com/kb/555134



-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

giucorn Profilo | Junior Member

Credevo di fare una prova semplice. Passiamo al caso specifico. Adesso nel mio caso specifico ho un'altro problema. Riepilogo come è la mia situazione. Possiedo un WEBSERVER che vi ho già descritto prima le caratteristiche. Le operazioni devono essere effettuate su un'altro pc, chiamato PCDATI, qui sono situate tabelle che utilizzo per diverse operazioni, e fin qui tutto ok.
Il bath mi serviva per eseguire un programma TTS che dal testo converte in audio, salvando il tutto sul PCDATI.

Quando richiamo il file bat mi da il seguente errore:
"Errore durante l'accesso: nome utente sconosciuto o password non valida. (Eccezione da HRESULT: 0x8007052E)"
In questo caso non mi serve nessuna apertura di file come nel bat di prova ma solo l'eseguzione di questo bat.

rossimarko Profilo | Guru

Penso che tu abbia dei permessi di accesso al file. I due pc sono in un dominio?
Se si puoi utilizzare l'impersonate di asp.net (http://msdn.microsoft.com/en-us/library/aa292118.aspx) e utilizzare un utente di rete che ha i permessi per poter lanciare il bat sull'altro server.

Altrimenti cambia il tipo di approccio. Lancia un bat sul tuo webserver che poi richiama il comando sul server remoto, magari sfruttando il comando runas e specificando utente e password per lanciare il comando correttamente
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

giucorn Profilo | Junior Member

forse non ho specificato che sono un principiante in materia, mi scuso x l'ignoranza ma non ci sto capendo nulla.

Io L'operazione Impersonate = "True" ed la replica di un account con autorizzazioni da administrator l'avevo gia fatto per potermi collegare al database in rete su PC-DATi e dopo tante prove sono riuscito ad effettuare query sul db.

Adesso x il bat ho il problema simile, in cosa sto sbagliando?

rossimarko Profilo | Guru

>forse non ho specificato che sono un principiante in materia,
>mi scuso x l'ignoranza ma non ci sto capendo nulla.
>
>Io L'operazione Impersonate = "True" ed la replica di un account
>con autorizzazioni da administrator l'avevo gia fatto per potermi
>collegare al database in rete su PC-DATi e dopo tante prove sono
>riuscito ad effettuare query sul db.
>
>Adesso x il bat ho il problema simile, in cosa sto sbagliando?

L'utente che hai specificato per l'impersonate è un utente di dominio o un'administrator locale?
Hai controllato che username e password fossero corretti? Il fatto che dica "nome utente sconosciuto o password non valida" mi fa sorgere qualche dubbio..

Se sei in dominio si tratta di verificare i permessi di accesso al file della share, altrimenti se non sei in dominio dobbiamo valutare come poter gestire la situazione
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

giucorn Profilo | Junior Member

L'utente che hai specificato per l'impersonate è un utente di dominio o un'administrator locale?

Non ho realizzato nessun dominio, la mia è una reta molto semplice: 2 PC collegati in rete locale, PC-DATI e WEBSERVER, facenti parte di uno stesso gruppo di lavoro. L'account administrator del PC-DATI sono 2, "administrator con PW prova_pw" ed un altro account creato proprio per IIS ASPNET senza password.

Io nella cartella condivisa la visualizzo regolarmente, anche perchè ho memorizzato all'accesso Account e password. Poi per in permessi di accesso io all'utente che utilizzo ho dato livello administrator con possibilità di lettura e modifica.

Giusto un dubbio, quando mi collego alla cartella condivisa via web, con quale account mi collega? Non è quello che ho creato in IIS?

rossimarko Profilo | Guru

Se specifichi l'impersonate puoi impostare anche lo username e la password dell'utente che vuoi impersonificare. Comunque essendo due pc distinti non in dominio l'utente rimarrebbe locale. A scopo informativo sul sito del supporto microsoft trovi un esempio su come fare l'impersonate da codice solo per una determinata chiamata (ad esempio l'esecuzione del bat), senza far girare tutto il sito con quell'utente (http://support.microsoft.com/kb/306158).

Mi spiego meglio. Sul pc che contiene il bat hai creato un utente. Questo utente ha i permessi per accedere al file. Supponiamo ad esempio che l'utente si chiami WebIIS.

Il tuo problema adesso è far girare l'applicazione web con un utente che possa accedere all'altro pc. Se sul web specifichi i dati dell'utente WebIIS ti dirà che l'utente non esiste, ed in effetti sul web server non esiste un utente con quelle credenziali perchè è stato creato sull'altro pc.
Una prova che puoi fare è quella di creare un utente identico anche sul webserver (stessa username e stessa password) e impostare questo utente come utente da impersonificare.


-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

giucorn Profilo | Junior Member

Continua a darmi lo stesso errore, non so che fare!!!

giucorn Profilo | Junior Member

Ho formattato il Web Server e ho dato come account lo stesso del PC-DATI così quando comunicano non c'è bisogno di inserire utente e password.

Il problema persiste. cosa devo fare, non so dove sbattere la testa...

rossimarko Profilo | Guru

Fai una prova banale, prova ad entrare sul web server con l'utente con cui stai facendo girare asp.net e prova a lanciare il bat per vedere cosa succede
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

giucorn Profilo | Junior Member

Dalla rete eseguendo il Bat funziona benissimo....

rossimarko Profilo | Guru

Un tentativo che puoi fare è chiamare un comando locale (un bat o un vbs) che poi si occupi di fare la chiamata remota con un comando runas.

Cerca in rete qualche script vbs o qualche tool che ti faccia specificare la password tipo questi: http://www.softtreetech.com/24x7/archive/53.htm, http://www.sysadmin.it/pages/script/script.asp?ID=136 e fai delle prove.
Prima verifica che vada lanciandolo manualmente e poi prova ad eseguirlo dal processo asp.net (ovviamente deve essere salvato il locale sul webserver)
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
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