2016-05-03 13 views
0

Ich habe einen Webservice und möchte einen Shell-Befehl ausführen können, der Administratorrechte erfordert. (Der Befehl ist DJOIN, Vorstufe AD mit einem Computer-Konto und erstellen Sie eine Datei.)Wie führe ich einen Shell-Befehl in C# (auf einem Webserver) mit erhöhten Anmeldeinformationen aus?

ich dies zu testen, wie folgt:

System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
System.Security.SecureString ssPwd = new System.Security.SecureString(); 
proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.FileName = "cmd.exe"; 
proc.StartInfo.Arguments = "/C echo %username% > c:\\test\\user.txt"; 
proc.StartInfo.Domain = "mydomain"; 
proc.StartInfo.UserName = "myadmin"; 
string password = "mypassword"; 
for (int x = 0; x < password.Length; x++) 
{ 
    ssPwd.AppendChar(password[x]); 
} 
proc.StartInfo.Password = ssPwd; 
proc.Start(); 

C: \ Testordner auf dem Webserver hat die richtigen Berechtigungen, und der Code-Block läuft gut, wenn ich es ohne Angabe von Anmeldeinformationen ausführen. Sie vermag jedoch nicht, wenn ich sie in hinzufügen

Ich habe auch einschließlich versucht.

proc.StartInfo.Verb = "runas" 

aber das funktioniert auch nicht.

Wie kann ich den Befehl als Benutzer mit erhöhten Rechten ausführen?

+0

https://support.microsoft.com/en-us/kb/306158 Überprüfen Sie die "Identität eines bestimmten Benutzers in Code" – Gusman

+1

Mögliche Duplikate von [Prozess Privilegien programmatisch erhöhen?] (Http://stackoverflow.com/ questions/133379/elevating-process-privilege-programmatically) – Xiaoy312

+0

Ich habe es auch mit dem Verb "runas" versucht, aber das funktioniert auch nicht. – Ben

Antwort

0

So wie ich diese Arbeit erhielt, war diesen Code zu verwenden:

System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
System.Security.SecureString ssPwd = new System.Security.SecureString(); 
proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.FileName = "cmd.exe"; 
proc.StartInfo.Arguments = "/C echo %username% > c:\\test\\user.txt"; 
proc.StartInfo.Domain = "mydomain"; 
proc.StartInfo.Verb = "runas"; 
proc.StartInfo.UserName = "myadmin"; 
string password = "mypassword"; 
for (int x = 0; x < password.Length; x++) 
{ 
    ssPwd.AppendChar(password[x]); 
} 
proc.StartInfo.Password = ssPwd; 
proc.Start(); 

Und auch Identität des Anwendungspools in IIS Einstellung diesen gleichen Benutzer zu verwenden.