Autor Beitrag
MBGucky
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Di 30.03.10 22:54 
Hi,

ich soll im Kundenauftrag eine in C# geschriebene .Net-Anwendung von einem Windows Server 2003 auf einen
Windows Server 2008 mit Plesk umziehen. Leider fehlen mir derzeit noch wichtige Grundkenntnisse, um selber
größere C#-Anwendungen zu schreiben. Trotzdem habe ich die meissten Fehler ausmerzen können (hauptsächlich
musste ich Pfade ändern oder Berechtigungen erteilen.)

Doch nun scheitert es daran, dass mittels Process.Start() eine Batchdatei erstellt und ausgeführt werden soll.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
int laufendezahl = 1234// hab ich jetzt mal hier eingefügt. Eigentlich wird zuvor diese Zahl generiert 
string befehl = "c:\\inetpub\\vhosts\\die-domain\\httpdocs\\unterordner\\Programm.exe -Parameter1 -Parameter2 -Parameter3 c:\\pfad\\zur\\quelldatei\\datei" + laufendezahl + ".typ c:\\pfad\\zur\\zieldatei\\datei" + laufendezahl +".typ\r\n" +
"c:\\inetpub\\vhosts\\die-domain\\httpdocs\\unterordner\\Programm.exe -Parameter1 -Parameter2 -Parameter3 c:\\pfad\\zur\\quelldatei\\dateizwo" + laufendezahl + ".typ c:\\pfad\\zur\\zieldatei\\dateizwo" + laufendezahl +".typ";
string batchfile = "c:\\pfad\\zum\\batchfile\\batch" + laufendezahl + ".bat";

File.WriteAllText(batchfile,befehl);
Process crypt = Process.Start(batchfile);
while (!crypt.HasExited)
{
}


Dieser Code funktioniert auf dem alten Server ohne Probleme. Auf dem neuen Server wird das Batchfile einfach nicht ausgeführt.
Wenn ich den Exit-Code abfrage, lautet dieser "1" (wenn ich recht informiert bin, steht 1 für false bzw. nicht ausgeführt)

Ich erhalte keinerlei Fehlermeldung. Der Rest des Programms läuft ohne Probleme. Ich erhalte auch keinen Eintrag in der
Ereignissanzeige.
Ein Fehler an der Batchdatei liegt nicht vor. Ich kann diese per RemoteDesktop auf dem Server ausführen und sie macht
dann genau das, was sie machen soll.



Noch ein wenig zur Funktionsweise des Programms:

vorgesehen ist, dass ein Clientprogramm auf den Server zugreift und nach einigen Angaben die verschlüsselte Datei
(=zieldatei) herunterladen kann.
Dies kann ich auf dem Server via Remotedesktop simulieren, indem ich auf dem Server den Browser öffne, die
URL zu dem Serverprogramm aufrufe. Das Ergebnis bekomme ich dann als xml angezeigt (die laufende Nummer und ein paar
Statuscodes. Diese Daten braucht das Clientprogramm, um die Datei herunterzuladen). Dieses Ergebnis wird mit auch
tatsächlich angezeigt. Das Programm arbeitet also einwandfrei, bis auf das Problem mit dem Batchfile, denn die
Zieldatei existiert nicht. Sie existiert aber, wenn ich das Batchfile via RemoteDesktop per Doppelklick aufrufe.



Folgendes habe ich schon (erfolglos) versucht:

  • Für das Erstellen des Batchfiles musste ich einem bestimmten Useraccount Schreibberechtigung für den Zielordner
    geben. Diesem User habe ich nun "Vollzugriff" auf den Ordner mit der .exe, den Ordner mit der .bat, dem Quell- und
    dem Zielordner gegeben. Die Berechtigungen sollten also meiner Meinung nach ausreichen.
  • Ich habe versuchsweise statt einer .bat mal die .exe selbst mit den Parametern via Process.Start() versucht zu starten
    (( Process.Start("pfad\\Programm.exe","die ganzen Parameter"); )) Das klappt auch nicht.
  • auf diversen Internetseiten habe ich Codes gefunden um dieses Problem zu umgehen, indem die einzelnen Zeilen
    des Batchfiles stattdessen in cmd.exe ausgeführt werden. Ergebnis negativ.
  • Ich habe die UAC auf dem Server deaktiviert (Benutzerkontensteuerung). Bringt nichts.
  • Ich habe versucht, mit try&catch eine Fehlermeldung zu bekommen. Da kommt nix.



Vielleicht hat hier jemand eine Idee, wie ich das noch ans Laufen kriegen könnte.
Es handelt sich um einen "nagelneuen" CloudServer mit Windows 2008 Server und Plesk 9.0