Psexec-Problem beim Ausführen einer Anwendung auf einem Windows Server 2008 R2-Computer von einem 2003 R2-Computer

9536
Vermin

Ich versuche, eine Anwendung auf einem Windows Server 2008 R2-Computer von einem Windows Server 2003 R2-Computer aus auszuführen, wobei eine Batchdatei mit der folgenden Codezeile in einer Batchdatei verwendet wird:

psexec \\nightmachine -u DOMAIN\User -p Password -i "C:\FilePath\Application.exe" argument1 argument2 

Die Anwendung kann nicht ordnungsgemäß ausgeführt werden, wenn psexec gestartet wird. Die Anwendung wird jedoch ordnungsgemäß ausgeführt, wenn ich mich mit demselben Benutzer an der Nightmachine angemeldet und sie über cmd aus dem Dateipfad gestartet habe. Ich konnte den in der Anwendung zurückgegebenen Fehler aus seinem Protokoll abrufen. Die folgende Ausnahme ist zurückgegeben:

System.DllNotFoundException: DLL 'rasapi32.dll' kann nicht geladen werden: Eine Initialisierungsroutine für Dynamic Link Library (DLL) ist fehlgeschlagen. (Ausnahme von HRESULT: 0x8007045A)

Nach der Suche nach diesem Fehlercode im Netz gibt es viele Beiträge, die besagen, dass dies durch Dateibeschädigung verursacht wird, aber ich kann nicht erkennen, warum dies der Fall ist, da die Anwendung normal ausgeführt wird, wenn sie nicht von psexec ausgeführt wird. (der Benutzer ist ein Administrator auf beiden Maschinen)

Kann mir bitte jemand weiterhelfen? Wenn Sie weitere Informationen benötigen, um dieses Problem zu lösen, fragen Sie bitte, und ich werde mein Bestes geben, um es zu veröffentlichen.

2

2 Antworten auf die Frage

0
KCotreau

Ich gehe davon aus, dass Ihr UNC in der Frage nur einen Schrägstrich hat, weil er hier so eingegeben werden muss, um "\\\" zu formatieren, aber wenn nicht, korrigieren Sie das. Ich denke, das Problem ist, dass psexec Ihre Argumente außerhalb der Zitate betrachtet und nicht weiß, was mit ihnen zu tun ist. Am einfachsten ist es möglicherweise, den Befehl, den Sie auf dem Server ausführen können, in eine Batchdatei und psexec dieser Batchdatei zu legen, oder Sie können versuchen, das zweite Anführungszeichen nach den Argumenten zu verschieben. Natürlich dürfen Sie dann keine Leerzeichen im Pfad haben.

psexec \\nightmachine -u DOMAIN\User -p Password -i "C:\FilePath\Application.exe" argument1 argument2" 
Vielen Dank für Ihre Antwort, aber ich habe beide von Ihnen vorgeschlagenen Lösungen ausprobiert, und leider haben beide keine Lösung für das Problem gefunden. Ich habe versucht, die Argumente in die Anführungszeichen einzufügen, was bedeutet, dass psexec den angegebenen Dateipfad nicht finden konnte (keine Leerzeichen im Dateipfad), und ich habe auch versucht, mit psexec eine Batchdatei auf dem Nachtcomputer auszuführen, auf der dann die Anwendung ausgeführt wird. dasselbe Problem wie zuvor Vermin vor 12 Jahren 0
@Vermin Wenn du sagen könntest, was der eigentliche Befehl ist, kann ich dir vielleicht mehr helfen. KCotreau vor 12 Jahren 0
Die Anwendung ist eine Zweck-Build-Implementierungs-App, die verschiedene Aufgaben ausführt (weiß nicht, was ich geschrieben habe, ich muss es nur remote ausführen). Der Befehl lautet: psexec \\ nightmachine -u DOMAIN \ User -p Kennwort -i "C: \ Deployment \ DeploymentAspplication \ DeploySnapshot.exe" / latest / noninteractive Die Argumente sind vorhanden, damit die App die neuesten erforderlichen Dateien erhält ohne Benutzerinteraktion laufen (obwohl psexex mit dem Argument -i ausgeführt wird, aber ohne -i bedeutet, dass die App nur hängt und nichts tut). Vermin vor 12 Jahren 0
Ich konnte die Codezeile identifizieren, in der die Ausnahme ausgegeben wird, und es wird nur eine Funktion ausgeführt, die in einer anderen Klasse innerhalb des App-Projekts ausgeführt wird, die problemlos ausgeführt wird, wenn sie nicht mit psexec ausgeführt wird Vermin vor 12 Jahren 0
@Vermin Ich könnte versuchen, die App lokal zu kopieren und sie mit der Option -c auszuführen. Sind auch die Remote-Anwendung und alle Komponenten im Systempfad? KCotreau vor 12 Jahren 0
0
Vermin

Problem gelöst! Ich fand heraus, dass die Anwendung, die auf dem Remote-PC von psexec ausgeführt wird, die Benutzerdetails verliert, wenn die Anwendung Prozesse außerhalb von sich selbst aufruft, was bedeutet, dass erforderliche Berechtigungen verloren gingen.

Um dieses Problem zu umgehen, habe ich eine geplante Aufgabe auf dem Remote-PC eingerichtet, auf der sich die Anwendung befindet, um die Anwendung mit den erforderlichen Anmeldeinformationen des Benutzers auszuführen. Die Aufgabe wurde so eingerichtet, dass sie einmal ausgeführt wird, aber auch so eingerichtet ist, dass sie manuell ausgelöst werden kann. Dies bedeutete, dass beim Ausführen der Anwendung durch die Task keine Berechtigungen verloren gingen. Ich habe die Aufgabe mit Psexec gestartet:

psexec \\remotemachine schtasks /run /tn "Task name"