Newsgroup: it.comp.lang.visual-basic
Titolo: RunAs e applicazione con parametri

Ho usato questo codice:
Set ws = CreateObject("WScript.Shell")
Call ws.Run("runas.exe /user:Dominio\Utente " & Chr(34) & "del " &
strFilePathName & " /Q /F" & Chr(34), 1, False)
Sleep (1000)
ws.SendKeys "Password"
ws.SendKeys "{ENTER}"
 
ma non funziona, lanciandolo da riga di comando dice che non riesce a
trovare il file perchč prende il del + il percorso e il nome del file
come un eseguibile da cercare, dovrei togliere le virgolette ma poi
non va piů la RunAs, dove sbaglio?
Il mio scopo č cancellare un file usando un apposito utente che ha il
diritto di farlo.
Ciao
-- 
Fritz
Togli *ERASE* per rispondere in e-mail.

 trovare il file
Per ora ho scoperto che non è colpa del codice VB ma di windows che è
deficiente questo comando funziona:
runas /user:Dominio\Utente "notepad c:\pippo.txt"
questo no:
runas /user:Dominio\Utente "del c:\pippo.txt"
come risultato da:
RUNAS ERROR:  Unable to run - del c:\pippo.txt
2: The system cannot find the file specified.
Ciao
Fritz


Il motivo è che del è un "comando interno" e  non un eseguibile.
Per eseguirlo con Shell o altro devi invocare l'interprete dei comandi di 
Windows (i.e. cmd.exe).
Quindi bisogna che del sia preceduto da "cmd /C".
Per generalità è meglio usare Environ("COMSPEC") che restituisce il percorso 
completo dell'interprete dei comandi.
Dovrebbe essere così:
Call ws.Run("runas.exe /user:Dominio\Utente " & Chr(34) & Environ("COMSPEC") 
& " /C del " & strFilePathName & " /Q /F" & Chr(34), 1, False)
Bye
Raf


Ok, grazie effettivamente cosi funziona.
Ciao
Fritz


C'è un problema, l'aggiunta del CMD crea una nuova finestra DOS, c'è
modo di non farla vedere o iconizzarla? Per la prima finestra DOS non
c'è problema e l'ho quantomeno iconizzata, nasconderla non posso
altrimenti poi la SendKeys non funziona.
Ciao
Fritz

 altrimenti poi la SendKeys non funziona.
Mi sa che non ci sia molto da fare...
Runas esegue il programma specificato ed č lui che crea la nuova finestra.
Sulla quale non puoi avere il controllo dal tuo programma.
Forse bisogna trovare una strada diversa per eliminare un file, quando 
l'utente corrente che esegue il tuo programma non ha i diritti per farlo.
(Anche perché, ad esempio, in Vista il trucco di usare SendKeys non 
funzionerebbe, in quanto SendKeys viene bloccata).
Bye
Raf

funzionerebbe, in quanto SendKeys viene bloccata).
Che vista sia una schifezza già lo sapevo ma per ora non è un mio
problema, dal cliente al max c'è XP.


 privilegi particolari ma non saprei come fare.
Quindi hai provato con le API LogonUser + ImpersonateLoggedOnUser?
http://msdn.microsoft.com/en-us/library/aa378184(VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa378612(VS.85).aspx
Non mi sembra che richiedano particolari privilegi.
Raf 

 Non mi sembra che richiedano particolari privilegi.
Su Windows 2000 (la maggior parte dei miei client) si, richiede il
privilegio SE_TCB_NAME (act as part of operating system) che non è
impostabile da codice e va fatto a mano su tutti i client (200 circa).
Ciao
Fritz


Ah, giusto: quando dicevi "al max c'è XP", significava che hai anche PC con 
2K...
Allora c'è l'API CreateProcessWithLogonW, che non richiede nessun 
privilegio:
http://support.microsoft.com/?scid=kb%3Ben-us%3B285879&x=16&y=13
Bye
Raf 

 privilegio:
http://support.microsoft.com/?scid=kb%3Ben-us%3B285879&x=16&y=13
Mi sà che ai tempi l'avevo vista ma allora cercavo di cambiare
l'utente con cui gira l'applicazione ora invece che mi sono
riconvertito ad usare un processo esterno posso tranquillamente usare
questa che è sicuramente più affidabile dell'accrocchio col RunAs e
forse riesco anche a non mostrare nessuna finestra. Oltretutto leggo
che è comunque preferibile anche su S.O. recenti rispetto alla
LogonUser.
Grazie mille, ciao
Fritz

 forse riesco anche a non mostrare nessuna finestra.
Per la cronaca alla fine ho usato la CreateProcessWithLogonW con la
quale rilancio la mia applicazione con le nuove credenziali
passandogli il percorso del file da cancelllare, il tutto per non
dover distribuire altro oltre all'eseguibile e avere comunque maggior
controllo, per l'utente la cosa è trasparente perchè non viene
visualizzato nulla.
Ciao
Fritz