2016-09-30 3 views
0

Ich habe eine App als Netzwerkdienst (ich kann das nicht ändern) und muss einen Befehl ausführen (Ausführen als Bat-Skript) als ein bekannter lokaler Benutzer. Ich bekomme keine Antwort und das Skript wird nicht ausgeführt. Die seltsame Sache ist, dass, wenn ich den Code als lokaler Benutzer ausführe, es ohne ein Problem arbeitet.Befehl als ein anderer Benutzer ausführen C#

System.Diagnostics.Process process = new System.Diagnostics.Process(); 
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
startInfo.FileName = @"C:\Windows\System32\cmd.exe"; 
startInfo.Arguments = "/C " + @"c:\example\script.bat"; 
startInfo.UseShellExecute = false; 
startInfo.RedirectStandardError = true; 
startInfo.RedirectStandardOutput = true; 
var sspw = new SecureString(); 
foreach (var c in "MyPassword") 
{ 
sspw.AppendChar(c); 
} 
startInfo.Domain = Environment.MachineName; 
startInfo.UserName = "MyUser"; 
startInfo.Password = sspw; 
process.StartInfo = startInfo; 
process.Start(); 
process.WaitForExit(); 
+0

Haben Sie versucht, Ihr 'ProcessStartInfo' -Objekt zu verwenden, um den Prozess tatsächlich auszuführen (anstatt das separate' Process'-Objekt zu haben)? – SlimsGhost

+0

Leider muss der Dienst ausgeführt werden, da NetworkService nicht in meiner Kontrolle ist. Ich habe versucht, [link] (https://www.nuget.org/packages/SimpleImpersonation) zu verwenden, bin aber nicht weit gekommen. – Karanko

+0

Nach [diesem Artikel] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms684272 (v = vs.85) .aspx) hat 'NetworkService'" minimale Rechte für den lokalen Server Computer". Wenn Sie dies logisch interpretieren, scheint dies darauf hinzudeuten, dass Sie einen Prozess unter diesem Konto nicht als anderer Benutzer ausführen können, da alle anderen Benutzer mehr Zugriff als "NetworkService" haben. – Icemanind

Antwort

0

Ich glaube, Sie müssen das Arbeitsverzeichnis setzen, wenn ein Benutzername/Passwort

nach MSDN mit ...

Die Working Eigenschaft muss festgelegt werden, wenn Benutzername und Passwort zur Verfügung gestellt werden . Wenn die Eigenschaft nicht festgelegt ist, ist das Standardarbeitsverzeichnis% SYSTEMROOT% \ system32.

+0

Ich gebe dies auch zu – Karanko

+0

Leider hat dies nicht geholfen, da ich bereits volle Pfade zu meinen ausführbaren Dateien und Skripten verwendet habe – Karanko

Verwandte Themen