L'avvio di un processo in C#con nome utente e password genera l'eccezione "Accesso negato"




vb net process parameters (5)

All'interno di un'app Web di .NET 3.5 che esegue la rappresentazione, sto tentando di eseguire un processo tramite:

var process = new Process 
             { StartInfo = 
                    { CreateNoWindow = true, 
                      FileName = "someFileName", 
                      Domain = "someDomain", 
                      Username = "someUserName", 
                      Password = securePassword, 
                      UseShellExecute = false
                    }
             };

process.Start();

-La modifica della modalità di trust su full in web.config non è stata risolta.

-Si noti che var securePassword è un secureString impostato in precedenza nel codice.

Ciò genera un'eccezione con "Accesso negato" come messaggio. Se rimuovo il nome utente e le informazioni sulla password, l'eccezione scompare, ma il processo inizia come aspnet_wp invece dell'utente a cui ho bisogno.

Ho visto questo problema in più forum e non ho mai visto una soluzione fornita. Qualche idea?


Mi sono imbattuto nello stesso problema che hai fatto su un progetto. Ci dovrebbe essere un modo per generare un processo dalla tua app web con determinate credenziali, ma in pratica, è un kludge al meglio. Quello che ho finito per fare è stato semplicemente avere l'app che inviava le informazioni a un MSMQ e che un servizio Windows che ha fatto scoppiare gli articoli della coda ha servito le richieste.

Anche quando l'appliation si sta impersonando, vuole comunque essere eseguito sotto l'account utente theaspnet.


È possibile utilizzare ProcessStartInfo che consente di specificare le credenziali. Il trucco è che la password è una stringa sicura, quindi devi passarla come array di byte.

Il codice potrebbe essere simile a qualcosa:

Dim startInfo As New ProcessStartInfo(programName)
        With startInfo
            .Domain = "test.local"
            .WorkingDirectory = My.Application.Info.DirectoryPath
            .UserName = "testuser"
            Dim pwd As New Security.SecureString
            For Each c As Char In "password"
                pwd.AppendChar(c)
            Next
            .Password = pwd

            'If you provide a value for the Password property, the UseShellExecute property must be false, or an InvalidOperationException will be thrown when the Process..::.Start(ProcessStartInfo) method is called. 
            .UseShellExecute = False

            .WindowStyle = ProcessWindowStyle.Hidden
        End With

Sono andato in un modo diverso e ho messo l'intera applicazione nel proprio pool di app in esecuzione come l'utente che ci stava originariamente impersonando. Ora, quando asp.net genera un nuovo processo, viene generato nel contesto dell'utente invece di aspnet_wp. Non è la soluzione esatta al problema che ho postato, ma ha funzionato per la nostra situazione.


Controllare il livello di sicurezza per l'accesso al codice poiché Process richiede la Full Trust . La tua applicazione web potrebbe essere in esecuzione in un'impostazione di fiducia parziale.

Dalla pagina MSDN di processo:

permessi

* LinkDemand
per piena fiducia per il chiamante immediato. Questa classe non può essere utilizzata da codice parzialmente attendibile.

* EreditàDemand
per piena fiducia per gli eredi. Questa classe non può essere ereditata da codice parzialmente attendibile.


Volevo dire che ho provato il codice in questo sito, incluso il codice aggiornato menzionato nei commenti. Questo codice esegue il processo come identità impersonata (che è davvero tutto ciò di cui ho bisogno), ma il reindirizzamento dell'errore standard fallisce, quindi questo collegamento potrebbe essere utile a chi non si occupa di trattare lo stderr.







permissions