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();
Haben Sie versucht, Ihr 'ProcessStartInfo' -Objekt zu verwenden, um den Prozess tatsächlich auszuführen (anstatt das separate' Process'-Objekt zu haben)? – SlimsGhost
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
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