c# - start - vb net process parameters




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

È 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

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?


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.


Non sono sicuro se questo è, ma ho avuto un problema correlato e la risposta è stata che l'account non aveva il permesso di impersonare sulla macchina. Questo può essere modificato aggiungendo l'account alla politica "Impersonare un client dopo l'autenticazione" utilizzando il gestore della politica locale sulla macchina.







permissions