Hab mal den Code zuerst gepostet.
So hi erstmal und zu meinem Problem^^:
Der Folgende Code soll ein kleiner Launcher für das Spiel S4-League werden.
Die Variable lac ist die Wahl der Sprache und bekommt mit 2 Radiobuttons ihren Wert.
Der Client erwartet die Parameter:
-rc: (für uns nur eu)
-lac: (sprache; in meinem launcher nur eng und ger)
-auth_server_ip: (die ip des loginservers die meines wissens für eu gleich ist, wenn nicht, kann ich sie ja noch ändern; das problem tritt schon vorher auf!)
So ich habe schon etliches Probiert! Seit 16 Uhr bin ich am googlen und umschreiben, aber ich kriegs nicht gebacken.
Mal ist der Fehlercode 123 (heißt Fehler in der Aufrufsyntax; verwirrt mich ziemlich, denn wenn ich den ersten Parameter von CreateProcess weglasse, kommt 745 (bin mir jetzt nicht mehr sicher), obwohl bei beiden Möglichkeiten unten von den zwei DebugMessageBoxen der selbe Pfad ausgegeben wird!), mal 2 und eben auch mal 745.
Ich bin echt am Verzweifeln und finde einfach nicht die Lösung.
Der Pfad ist immer richtig [habe es einmal mit absolutem Pfad probiert und einmal mit relativem (beim 1. u. 2. Parameter nur S4Client.exe (beim zweiten noch die Parameter)) und auch einmal halb halb (beim 1. relativ beim 2. absolut)]!
Es will einfach nicht klappen.
Könnte mir einer dabei helfen?
sehr hilfreich
als ob ich da nicht schon gewesen wäre
danke wurstbrot.
werde mal sehen, dass ich das einbaue
edit:
hm 1. das zweite was du gepostet hast, wird nicht klappen, wegen den parametern (fehlende extra ")
da müsste man dann noch die parameter dranhängen + "" um alles
2. das erste:
eine frage
was bedeutet formattedArguments[0]?
ist das nicht das erste zeichen sprich "? warum genau gibst du das als Argument für Cmdline?
hm 1. das zweite was du gepostet hast, wird nicht klappen, wegen den parametern (fehlende extra ")
da müsste man dann noch die parameter dranhängen + "" um alles
Nein. Programmname in Anführungszeichen, Parameter einfach anhängen
Quote:
2. das erste:
eine frage
was bedeutet formattedArguments[0]?
ist das nicht das erste zeichen sprich "? warum genau gibst du das als Argument für Cmdline?
Ein Zeiger auf das erste Zeichen, hätte auch c_str() aufrufen können. Hatte früher das Programm anders strukturiert und ich hab nen std::vector<wchar_t> übergeben, das könnte ich mal ausbessern obwohl es egal ist.
Nein. Programmname in Anführungszeichen, Parameter einfach anhängen
.
das hatte ich ja vorher
da kam error 123!
im internet habe ich gelesen, dass man für mehrere parameter "" braucht, damit es klappt
da aber auch generell für die initialisirung "" gebraucht werden braucht man \"
also TCHAR[MAX_PATH] = L"\" name -arg -arg -arg\""
damit herauskommt
"name -arg -arg -arg", was ja gebraucht wird für das starten
ok in der komandozeile braucht man es nicht, aber wie gesagt, ganz am anfang, als ich noch gar nichts mit diesen ganzen \" gemacht habe, hatte ich es so, ohne die anführungszeichen gemacht, wie es wurstbrot als zweites gepostet hat! und das hab nen error
komisch, also in viele problemberichten sehe ich, dass es probleme gibt (lol), wenn man mehrere parameter hat, die durch leerzeichen getrennt sind, weil es dann nicht funktioniert.
naja ich probiers nochmal.
"F:\S4League\S4Client.exe -rc:eu -lac:ger -auth_server_ip:217.110.102.94" (aber ohne die ""! vorher hat er aus gegeben ""..."" (ohne die äußeren ""^^))#
edit: das gibts doch nicht. ich habe jetzt mal die parameter und damit die leerzeichen weggelassen und es geht immer noch nicht!
error 740
mal schnell googlen
p.s. ein paar auszüge aus anderen foren:
Quote:
Quote:
Hallo , sorry, dass ich den alten Beitrag wieder ausgrabe, aber ich habe ein ähnliches Problem.
D.h. eigentlich funktioniert alles so wie es soll, nur wenn die Übergabeparameter ein Leerzeichen enthalten müste man sie eigentlich in
"" Zeichen setzen. Macht man das, wird aber der Pfad zum Programm nicht mehr erkannt.
D.h. ich kann das Ganze nur nutzen wenn ich Übergabeparameter ohne Leerzeichen verwende. Hat jemand eine Idee wie man das zum Laufen bekommen könnte?
Also ich verwende einen Module Name (Pfad zur CMD.EXE) und in der CommandLine (zweiter Parameter) den Pfad zum Programm, oder zur Batch Datei plus der Startparameter.
Quote:
Wenn man Klammern im Pfad hat geht es auch nicht....
"C:/User/New Folder/my.cmd" klappt
"C:/User/New Folder(2)/my.cmd" klappt nicht.
edit: ahhh 740 ist ein Zugriffsproblem
Launcher mit Adminrechten ausgeführt und es ging.
Komisch nur, dass diese zitierten anderen Probleme mit Leerzeichen haben.. =/
Naja danke auf jeden Fall euch beiden.
edit: noch eine Frage:
Wenn du sagst, diese extra " sind falsch, weil man das nicht darf, warum funktioniert dann wurstbrots Implementierung?
Da sind doch auch L"\"" bei!
ah schon gut...^^ bei Leerzeichen im Pfad, müssen "" nicht bei den Parametern
Ok, alle Fragen geklärt, Launcher fertig und dank wurstbrots Post auch noch eine kleine Extrafunktion eingebaut.
Mit Low-LevelStrings meine ich deine char-Arrays (TCHAR[]).
C++-Strings, also die Strings aus der Standardbibliothek, sind leichter zu bedienen, sicherer und es ist einfach besserer Stil.
Wenn du weiterhin sowohl ASCII als auch Unicodestrings unterstützten möchtest, was ich nichtmal tun würde da ASCII auf Windows eigentlich nichts mehr verloren hat, typedef dir nen Stringtyp zusammen. "typedef basic_string<TCHAR> tstring" oder soetwas. ;>
Nein ich bin da kein Fan von.
Ich mag CString und std::string am liebsten, aber für GetCurrentDirectory hatte ich nunmal nur ein Beispiel mit TCHAR zur Hand und bei CreateProcess konnte als zweiter Parameter CString nicht in LPWSTR konvertiert werden....... und da hatte ich bei so einem kleinen Projekt keine Lust auf großartige Konvertierung.
Normalerweise, wie gesagt nutze ich CString und manchmal auch std::string^^
p.s. Zum Teil auch deswegen, weil ich Arrays noch nie mochte xD
Nein ich bin da kein Fan von.
Ich mag CString und std::string am liebsten, aber für GetCurrentDirectory hatte ich nunmal nur ein Beispiel mit TCHAR zur Hand
p.s. Zum Teil auch deswegen, weil ich Arrays noch nie mochte xD
Solltest du auch nicht, wozu etwas statisches wenn es dynamische Containerklassen in C++ gibt
Quote:
und bei CreateProcess konnte als zweiter Parameter CString nicht in LPWSTR konvertiert werden
Ich gehe mal von den STL-strings aus. LPWSTR ist nichts anders als ein typdef auf wchar_t*. Ein std::wstring gibt beim Aufruf der Memberfunktion c_str() einen solchen Zeiger zurück, allerdings einen konstanten der hier nicht gefragt ist. In diesem Fall solltest du eher einen Zeiger auf das erste Zeichen übergeben:
Ist aber sehr Praktisch und der Standardtyp von Editboxen
Danke für die zwei Lösungen, werde sie dem nächst mal probieren.
Und nochmals danke euch zwei, ohne euch wär ich nicht weitergekommen xD
Habt auch Credits beim release bekommen
new:
So. Entschuldigung, dass ich diesen etwas älteren Thread wieder hoch holen muss, aber es gibt wieder mal ein kleines Problem mit CreateProcess und ich hoffe ich kann wieder so eine Hilfe wie beim letzten Mal bekommen.
Also:
Wir waren ja so weit, das Spiel zu starten, wenn der Launcher im selben Verzeichnis ist.
So nun bekam ich den Tipp, dass der Hackshield einen Registryeintrag mit seinem Verzeichnis macht.
Also wollte ich dessen Pfad auslesen und dann das HShield durch S4Client.exe ersetzen.
Ging auch super.
Nur gabs nen Error vom Client. Mittlerweile weiß ich warum:
Der Client wird wegen Parameter 8 =NULL im selben Verzeichnis wie der Launcher gestartet.
Das sollte kein Problem sein, wenn er im selben Verzeichnis ist, aber das soll ja gerade keine Bedingung sein.
Also habe ich eben aus dem Pfad den ich sowieso schon ausgelesen habe, auch noch den Pfad nur zum Verzeichnis ohne S4Client.exe ausgelesen.
War ja keine Schwierigkeit.
Da war das Konvertieren in LPCWSTR schon etwas schwerer, ging aber dank ein kleines bisschen C&P auch ohne Probleme.
Nur gibts eine Exception wegen Zugriffsverletzung.
(Und da bei google die meisten Beispiele mit dem Parameter=0 sind, habe ich kein ähnliches Problem+Lösung gefunden!)
Hier mal der nötige Code:
PHP Code:
//Globale Variablen std::string path; int size; // ich weiß nicht elegant, war aber an dem Abend gerade nicht am logischsten und habe auf einen Rückgabewert verzichtet :D
//hier beginnt der Teil zum kopieren ohne die Nullen, die einfach zwischen die Arrayelemente gesetzt werden, zu übernehmen! int i =0; int i2 = 0; while(i <256) { buf[i2] = temp[i]; i2++; i = i+2; } //Ende path = buf; size = strlen(buf)-8; // wurd für das substr() gleich gebraucht und für replace()
//Working Dir std::wstring stemp = s2ws(tmp); LPCWSTR dir = stemp.c_str();
//Konvertieren vom vollen Pfad const char* all = path.c_str(); int len = 1 + strlen(all); wchar_t* t = new wchar_t[len]; mbstowcs(t, all, len); TCHAR* path2 = (TCHAR*)t;
In deiner OnBnClickedButton1 funktion entsteht ein Memory leak. Da fehlt ein delete[] t; und denk dir mal bessere namen für die Variablen aus. Les mir mal den code in paar minuten durch.
hm.
und alleine deswegen?
der fehler kommt erst bei CreateProcess
(und solche mini-namen nehme ich gerne für Variablen die kruzzeitig genutzt werden/rückgabewerte sind (außerdem ist gerade der teil C&Ped; ich habe nach einer guten Konvertierungsmöglichkeit gesucht und das gefunden^^) für wichtige nehme ich auch welche mit sinn)
edit: Ausnahme kommt immernoch.
Ich vermute, dass es an einem Overflow liegt, der durch Nutzen von _tcscpy anstatt _tcscpy_s kommt. Aber eigentlich habe ich dafür gesorgt, dass alles passen müsste und beim Debuggen werde alle String (auch nach _tcscpy) richtig angezeigt =/
Metin 2 Pserver Problem/ Lösung für das Matrix Kartennummer Problem 01/04/2010 - Metin2 Private Server - 3 Replies Hy Leute
Wie in der Überschrift genannt, hab ich gerade ein Problem mit meinem Metin 2Server.
Ich lasse ihn via Loopbackadapter laufen, funktioniert auch ganz gut.
Ich hab aber jetzt das Poblem, das in meinem Account nur noch Krieger mit Level null stehen.
Wie kann ich das Beheben??, das is auch manchmal da, wenn ich via Navicat n neuen Account mach. Hoffe einer hatt ne Lösung
Hab n Screenshot im Anhang
Aber ich hab ja auch ne Lösung für n anderes Problem.
Gestern hatte ich beim...
[Problem] Problem with server starting - cannot find quest index for PaxHeader 12/22/2009 - Metin2 Private Server - 1 Replies Hello!
I have this same problem as here when i'm starting my server:
http://www.elitepvpers.com/forum/metin2-pserver-di scussions-questions/307143-metin2-serverfiles-ques t-index-fehler.html
But I didn't know the answer.. how to repair this?
Greetings