2015-07-27 51 views
5

Voglio avviare un altro programma che viene eseguito come utente da un programma in esecuzione come amministratore.Avviare un processo come utente da un processo in esecuzione come amministratore

Il problema è che il secondo programma deve utilizzare Outlook, che non è possibile se il programma viene eseguito come amministratore. Il programma principale deve essere eseguito come amministratore.

ho già messo a punto questo due soluzioni:

Process.Start("cmd.exe", @"/C runas.exe /savecred /user:" + Environment.UserDomainName + "\\" + Environment.UserName + " " + "\"SomeProgram.exe" + "\""); 

o

Process.Start("explorer.exe", "SomeProgram.exe"); 

ma ho un problema con entrambe le soluzioni. Il primo chiede la password all'utente (solo la prima volta dopo il riavvio di Windows). Il secondo probalby non funzionerà in futuro, perché per quanto ho scoperto è considerato come un bug e probabilmente risolto con un aggiornamento futuro.

Quindi mi piacerebbe sapere c'è qualche altra soluzione, in cui l'utente non ha bisogno di inserire la sua password?

Questo sembra funzionare per me:

Process.Start("cmd.exe", @"/C runas.exe /TrustLevel:0x20000 " + "\"SomeProgram.exe" + "\""); 
+1

Raymond Chen ha fatto un buon lavoro di descrivere questo in [Come posso avviare un processo di terra terra dal mio processo con privilegi elevati e viceversa?] (Http://blogs.msdn.com/b/oldnewthing/archive/ 2013/11/18/10468726.aspx) (che copre anche tutti i tipi di dettagli, ad esempio quando elevazione utilizzava credenziali di account diverse da quelle utilizzate per il resto della sessione) –

+0

Ma non è solo un altro modo di utilizzare il exploer.exe per fare il lavoro? Comunque ho trovato un'altra soluzione, l'ho aggiunta al post originale. – FKorni

+0

La soluzione risolve correttamente l'eliminazione dall'account admin di Alice all'account utente di Bob (utilizzando gli esempi dal collegamento Raymonds)? –

risposta

1

Process classe ha StartInfo proprietà che è un'istanza di ProcessStartInfo di classe. Questa classe espone i membri UserName, Domain e Password per specificare l'utente che si desidera eseguire il processo.

Process myProcess = new Process(); 
myProcess.StartInfo.FileName = fileName; 
myProcess.StartInfo.UserName = userName; 
myProcess.StartInfo.Domain = domain; 
myProcess.StartInfo.Password = password; 
myProcess.Start(); 
+0

Ciò significa che ho bisogno di conoscere la password dell'utente, il che non è il caso. Il programma è utilizzato da molti utenti diversi, quindi questa non è un'opzione per me. – FKorni

+0

@FKorni Non penso che si possa impersonare un altro utente senza nemmeno conoscere le credenziali –

+0

Bene il programma principale richiede i diritti di amministratore con manifest, ma il secondo programma dovrebbe essere eseguito solo con l'utente normale della sessione corrente. – FKorni

Problemi correlati