PDA

View Full Version : [JAVA] Eseguire un programma con un altro username


osvit
20-05-2005, 09:43
Ho la necessità di creare una classe che sia in grado di eseguire un programma (es notepad.exe) utilizzando determinati username e password.
Esiste la funzione "CreateProcessWithLogonW" (contenuta nella dll di windows "Advapi32") che permette di fare ciò, ma in java non so come fare.
Qualche suggerimento?

71104
20-05-2005, 11:36
tanto cmq nella maggior parte dei casi non puoi usare neanche CreateProcessWithLogonW visto che l'account sotto il quale la chiami dovrebbe avere il permesso della policy di "agire come parte del sistema operativo" :rolleyes:

kingv
20-05-2005, 13:16
puoi scrivere una funzioncina (in C/C++) che fa da wrapper a quella del sistema operativo, ferme restando le limitazioni che ha menzionato 71104, e richiamarla tramite JNI.
o ancora (anche se più rozzo) puoi scrivere un piccolo programma che chiama quella funzione e richiamarlo dal programma java

osvit
23-05-2005, 10:30
tanto cmq nella maggior parte dei casi non puoi usare neanche CreateProcessWithLogonW visto che l'account sotto il quale la chiami dovrebbe avere il permesso della policy di "agire come parte del sistema operativo" :rolleyes:

Non ho ben capito. Cmq se facessi eseguire il programma con i diritti di administrator ci sarebbero lo stesso dei problemi?

puoi scrivere una funzioncina (in C/C++) che fa da wrapper a quella del sistema operativo, ferme restando le limitazioni che ha menzionato 71104, e richiamarla tramite JNI.
o ancora (anche se più rozzo) puoi scrivere un piccolo programma che chiama quella funzione e richiamarlo dal programma java

Qui andiamo sul complicato :muro:
Pensavo che in java esistesse qualche classe che permettesse di fare ciò.

Ho provato a fare un programmino in Visual FoxPro (sono uno dei pochi che in Italia lo usa) che utilizza il CreateProcessWithLogonW e funziona correttamente, ma permangono alcuni problemi per quanto riguarda le applicazioni sui dischi di rete:

_Non è possibile utilizzare la lettere del driver (es E:\file.exe) ma occorre usare l'UNC
_Una volta lanciata l'applicazione non vengono visti i dischi di rete collegati al pc
_Non è possibile utilizzare le stampanti di rete (errore nel caricare il driver)

Ho provata anche ad usare programmi già fatti (alcuni anche a pagamento) che permetto di eseguire applicazioni con un altro utente e psw ma riscontro sempre le stesse limitazioni.
Possibile che alla microsoft non hanno pensato a questa cosa? :(

Ciao e grazie :D

71104
23-05-2005, 17:03
Non ho ben capito. Cmq se facessi eseguire il programma con i diritti di administrator ci sarebbero lo stesso dei problemi?che io sappia nella maggior parte dei casi si: CreateProcessWithLogonW è un modo più comodo per eseguire LogonUser e CreateProcessAsUser, le quali funzionano solo se la policy da il permesso all'account di "agire come parte del sistema operativo" (normalmente solo SYSTEM dispone di questo privilegio, quindi solo i servizi possono chiamarla con successo).

Ho provato a fare un programmino in Visual FoxPro (sono uno dei pochi che in Italia lo usa) che utilizza il CreateProcessWithLogonW e funziona correttamente sicuro che funzioni? evidentemente l'account dal quale la chiami ha il permesso necessario...

ma permangono alcuni problemi per quanto riguarda le applicazioni sui dischi di rete:

_Non è possibile utilizzare la lettere del driver (es E:\file.exe) ma occorre usare l'UNC
_Una volta lanciata l'applicazione non vengono visti i dischi di rete collegati al pc
_Non è possibile utilizzare le stampanti di rete (errore nel caricare il driver) secondo me si tratta solo di una questione di permessi: prova a controllare che l'account sotto il quale gira il nuovo processo abbia la possibilità di accedere ai path che hai provato...

Ho provata anche ad usare programmi già fatti (alcuni anche a pagamento) che permetto di eseguire applicazioni con un altro utente e psw ma riscontro sempre le stesse limitazioni.
Possibile che alla microsoft non hanno pensato a questa cosa? :( allora credo proprio che l'account dal quale chiami CreateProcessWithLogonW abbia dalla policy il permesso sopra citato, ma gli account sotto i quali hai creato i nuovi processi non hanno la possibilità di accedere ai tuoi dischi e stampanti di rete, ecc. (l'errore nel caricamento del driver mi sembra strano... le stampanti di rete almeno in locale funzionano?)