Psexec functioniert nicht unter C-Sharp mit Process.Start()
Hallo @ All!
Ich knabbere seit 2 Tagen an einem Problem mit Psexec und C# das schon fein funktioniert hat, komme aber nach einer winzigen Änderung (vermutlich ganz unbewusst) irgendwie auf keinen grünen Zweig mehr und bitte um eure Unterstützung!
Das Problem im Detail:
in einem Forms-Project (.Net 4.0) liste ich in einer ListView mit 4 Spalten (PackageName, Version, DurationTime, Status) alle Packages (Installscripts) die von den Usern selbst installiert werden dürfen. die Exe läuft im User-Kontext und erst beim Klick auf INSTALL werden aus einer Rijndael AES 256-Bit verschlüsselten (ja ich weiß! Ein Sicherheitsrisiko, aber alle die das knacken könnten haben eh Adminrechte) Datei die Credentials des lokalen Administrator ausgelesen und danach unter anderem folgender Code ausgeführt:
wird der Code so ausgeführt bekomme ich solche komischen Meldungen:
Aber auch sowas wie:
Der PSEXEC-Service konnte nicht installiert werden (ist vermutlich ein Credential-Fehler)
Die Datei konnte nicht gefunden werden (nur welche?)
Zugriff verweigert (WAAAAAAAAAAAAAAS?????)
Lustigerweise (1) funktioniert der ArgumentString wenn ich ihn direct in der Console ausführe als lokaler Administrator.
Lustigerweise (2) funktionert der Aufruf unter C#, wenn ich psexec weg lasse (??). Das geht aber leider nicht, weil bestimmte Teile leider immer als System-Account laufen müssen.
Die Packages sind getestete SCCM-Packages und 100% lauffähig. Das als Fehler kann ich eindeutig ausschließen. Es muss wohl irgendwo in diesem Code ein Fehler vorliegen. Nur wo??
Danke für eure Unterstützung!
Grüße, Mayho
Ich knabbere seit 2 Tagen an einem Problem mit Psexec und C# das schon fein funktioniert hat, komme aber nach einer winzigen Änderung (vermutlich ganz unbewusst) irgendwie auf keinen grünen Zweig mehr und bitte um eure Unterstützung!
Das Problem im Detail:
in einem Forms-Project (.Net 4.0) liste ich in einer ListView mit 4 Spalten (PackageName, Version, DurationTime, Status) alle Packages (Installscripts) die von den Usern selbst installiert werden dürfen. die Exe läuft im User-Kontext und erst beim Klick auf INSTALL werden aus einer Rijndael AES 256-Bit verschlüsselten (ja ich weiß! Ein Sicherheitsrisiko, aber alle die das knacken könnten haben eh Adminrechte) Datei die Credentials des lokalen Administrator ausgelesen und danach unter anderem folgender Code ausgeführt:
private int InstallPackage(ClassModel currentPackage)
{
/*
Weiterverarbeitung des Returncodes, Aktualisierung der View usw. in anderen Methoden und Funktionen
*/
int toReturn = -999999;
Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.Domain = "";
p.StartInfo.WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.System);
p.StartInfo.UserName = MainConfigModel.Credentials.adminuser;
p.StartInfo.Password = MainConfigModel.Credentials.adminpassword; (als SecureString)
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = @"/c c:\OsTools\psexec.exe -s -accepteula cscript " + (char)34 + Path.Combine(currentPackage.FullPath, currentPackage.Script) + (char)34 + " " + currentPackage.Param;
try
{
p.Start();
p.WaitForExit();
toReturn = p.ExitCode;
}
catch (Exception e)
{
var wex = e as Win32Exception;
if (wex == null)
toReturn = 1;
else
toReturn = wex.NativeErrorCode;
}
return toReturn;
}
wird der Code so ausgeführt bekomme ich solche komischen Meldungen:
Aber auch sowas wie:
Der PSEXEC-Service konnte nicht installiert werden (ist vermutlich ein Credential-Fehler)
Die Datei konnte nicht gefunden werden (nur welche?)
Zugriff verweigert (WAAAAAAAAAAAAAAS?????)
Lustigerweise (1) funktioniert der ArgumentString wenn ich ihn direct in der Console ausführe als lokaler Administrator.
Lustigerweise (2) funktionert der Aufruf unter C#, wenn ich psexec weg lasse (??). Das geht aber leider nicht, weil bestimmte Teile leider immer als System-Account laufen müssen.
Die Packages sind getestete SCCM-Packages und 100% lauffähig. Das als Fehler kann ich eindeutig ausschließen. Es muss wohl irgendwo in diesem Code ein Fehler vorliegen. Nur wo??
Danke für eure Unterstützung!
Grüße, Mayho
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 280597
Url: https://administrator.de/forum/psexec-functioniert-nicht-unter-c-sharp-mit-process-start-280597.html
Ausgedruckt am: 02.04.2025 um 04:04 Uhr
5 Kommentare
Neuester Kommentar
Hi,
ich vermute mal, Local System hat keinen Zugriff auf das Script.
Teste mal, indem Du einfach mit cmd /c type ..." das Script ausgeben lässt (statt Psexec).
Was auch helfen kann, vorher mit "Console.WriteLine" das
(char)34 + Path.Combine(currentPackage.FullPath, currentPackage.Script) + (char)34 + " " + currentPackage.Param
ausgeben lassen.
E.
ich vermute mal, Local System hat keinen Zugriff auf das Script.
Teste mal, indem Du einfach mit cmd /c type ..." das Script ausgeben lässt (statt Psexec).
Was auch helfen kann, vorher mit "Console.WriteLine" das
(char)34 + Path.Combine(currentPackage.FullPath, currentPackage.Script) + (char)34 + " " + currentPackage.Param
ausgeben lassen.
E.
Hallo mayho,
das hatte ich in der Form auch schon mal. Das hat was mit dem Sessionkey und dem Userprofil zu tun, den PSEXEC nur abrufen kann wenn das Profil des Users geladen wurde, was Standardmäßig beim Process-Objekt nicht der Fall ist. Dazu musst du im Startinfo-Objekt noch die Eigenschaft LoadUserProfile auf true festlegen:
Dann sollte es normalerweise laufen.
Grüße Uwe
das hatte ich in der Form auch schon mal. Das hat was mit dem Sessionkey und dem Userprofil zu tun, den PSEXEC nur abrufen kann wenn das Profil des Users geladen wurde, was Standardmäßig beim Process-Objekt nicht der Fall ist. Dazu musst du im Startinfo-Objekt noch die Eigenschaft LoadUserProfile auf true festlegen:
p.Startinfo.LoadUserProfile = true;
Grüße Uwe