Schnitzl hat geschrieben:Also kein SupremeCommander-Kauf von mir.
Hey, nichts überstürzen! hab mich extra angemeldet um dich und alle anderen Win2k Nutzer (falls es hier überhaupt noch welche gibt) darüber zu informieren, dass SC - und zwar nicht nur die Demo - durchaus auf Windows 2000 läuft!
Die erste Fehlermeldung (Einsprungspunkt "getaddrinfo" nicht in ws2_32.dll gefunden) wird dadurch verursacht, dass SC eine WinSocket-Funktion aufruft, die erst in XP zu dieser dll hinzugefügt wurde. Dem kann leicht durch kopieren der dll von einem vorhanden WinXP-System in den bin-Ordner der Supreme Commander Installation abgeholfen werden.
Desweiteren verlangt SC noch ein Modul namens "faultrep.dll", hier kann genauso verfahren werden.
Das wirkliche Problem ist die eigentlich für Vista entwickelte DirectX Komponente XACT Audio (XACT steht für Cross-Platform (X) (A)udio (C)reation (T)ool). Diese wurde um den Übergang zu Vista zu vereinfachen auch zur aktuellsten DirectX9 runtime hinzugefügt - allerdings nur für Windows XP.
Will man eine aktuelle DirectX9 Version unter Win2k installieren verschweigt einem die Setup-Routine einfach, dass sie XACT (und eine andere neue Schnittstelle namens XInput, die wird von SC aber nicht gebraucht) schlicht mal ausgelassen hat.
Da - wie wir alle wissen - Win2000 und WinXP im Prinzip die gleichen Bestriebssysteme sind, läuft XACT natürlich auch unter Windows 2000. Die ganze Sache ist mal wieder reine Microsoft-Schikane
Die seit einiger Zeit im Internet kursierende Lösung, einfach die dll "X3DAudio1_1.dll" in den bin-Ordner zu setzen (zu beziehen ebenfalls von einem vorhandenen XP System oder aus dem INet), bewirkt zwar, dass Supreme Commander startet, jedoch hat man dann keinen Sound. Das ist auch logisch, weil der gesammte Rest der Komponente fehlt und nicht richtig registriert wurde.
Um das Problem zu lösen muss man die entsprechenden Module manuell installieren. Dazu braucht man eine aktuelle (midestens Oktober 2006) DirectX Distribution. Hier eine Schritt-für-Schritt Anleitung:
(1) Wenn nicht schon passiert, das orginale Archiv (z.B. "directx_oct2006_redist.exe") in einen leeren Ordner entpachen (mit WinZip/WinRAR/WinACE ...).
(2) Zur besseren Übersicht erstellt man in diesem Ordner einen neuen Unterordner und kopiert alle *.cab-Archive, die etwas mit XACT zu tun haben dort rein. (Natürlich nur die mit x86 im Namen, es sei denn Win2k unterstützt neuerdings 64bit

)
(3) Als nächstes entpackt man die *.cab-Archive
beginnend vom Ältesten in dieses Verzeichnis, und bestätigt alle Überschreiben-Meldungen.
Ein Blick in die *.inf-Files zeigt nun, was getan werden muss: "x3daudio1_0.dll" und "x3daudio1_1.dll" sowie alle "xactengine2_?.dll"-Dateien werden ins system32 Verzeichnis der Windows 2000 Installation kopiert (normalerweise C:\WNNT\system32). Anschließend werden die "xactengine2_?.dll"-Module registriert, offensichtlich handelt es sich bei denen um COM-dlls.
ACHTUNG: Diesen Schritt noch NICHT ausführen, vorher müssen die Dateien noch etwas bearbeitet werden.
(5) Um den Grund für diesen Schritt zu erklären, muss ich etwas ausholen. Alle in C, C++ und C# programmierten Spiele und Treiber (und das sind fast alle) brauchen die CRT (C-RunTime) genannten C-Laufzeitbibliotheken. Im Falle von Microsofts C-Compiler (der ebenfalls mit Abstand am häufigsten genutzt wird) heißt die wichtigste MSVCRT.dll. Das sich natürlich auch Programmiersprachen weiterentwickeln, müssen die Laufzeitbibliotheken aktuell gehalten werden. Bei Microsoft tut man dies indem neue CRTs einfach eine Nummer hinter den Namen bekommen und dann neben den Alten im System liegen.
Bei der Entwicklung von XACT hat man jedoch darauf geachtet, dieses System der Abwärtskompatiblität möglichst AUSZUHEBELN und hat die Module nur mit MSVCRT.dll verlinkt, was beim Einsatz in XP und Vista kein Problem darstellt, da diese Datei dann mit der neusten Version MSVCR80.dll identisch ist.
Genau hier liegt der Hund begraben: wir müssen die Referenzen in den "xactengine2_?" dlls ("x3daudio1_?.dll"s haben keine solche Referenzen) auf eine MSVCR80.dll umleiten. Hierfür verwendet man im Idealfall einen Hex-Editor, aber Notepad ode ein anderer Text-Editor könnte u.U. auch funktionieren, doch dafür keine Garantie meinerseits! Wir öffnen also alle "xactengine2_?" dlls in einem geeigneten Editor und suchen nach der Zeichenfolge "msvcrt.dll". Das 'r' ändern wir in ein 'x' und speichern ab. Aus Gründen, die wirklich zu Umfangreich wären als dass ich sie hier noch erklären könnte, können wir die Referenz nicht einfach in "msvcr80.dll" ändern - nur so viel: die Anzahl der Buchstaben muss gleich bleiben. Damit die neue Referenz also nicht ins Leere zeigt, müssen wir noch die in system32 vorhandene "MSVCR80.dll" kopieren und in "msvcrx.dll" umbenennen (Groß- und Kleinschreibung ist übrigens egal). Das Kopieren und Umbenennen kann der Einfachheit halber zusammen mit Schritt 6 erfolgen.
(6) Die so veränderten dlls und natürlich auch x3daudio1_0.dll und x3daudio1_1.dll kopieren wir jetzt ins system32-Verzeichnis der Win2000 Installation und erstellen uns wenn noch nicht passiert unsere msvcrx.dll.
(7) Abschließent müssen noch die COM-Server in den "xactengine2_?.dll"s registriert werden. Dafür öffnen wir die Kommandokonsole, wechseln darin ins system32-Verzeichnis (z.B. "cd C:\WINNT\System32" ohne "" eingeben) und führen für jede "xactengine2_?.dll" den Befehl "regsvr32.exe xactengine2_?.dll" (wieder ohne "") aus. Das ? ist durch die jeweilige Nummer zu ersetzen.
Und schon haben wir ein 1a funktionierenden Supreme Commander
Hoffe, das hilft dir weiter. Wenn ich nicht so faul wäre, würde ich mal ein Script oder sowas schreiben, aber eigentlich ist die Methode ja nicht sooo umständlich.
Ich hoffe du hast die Demo noch nicht runtergehauen, oder noch schlimmer, Windows XP installiert
Also viel Glück beim Ausprobieren!