[Delphi] Counter-Strike starten mislukt

Pagina: 1
Acties:

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 18-08 10:58

Bergen

Spellingscontroleur

Topicstarter
Het volgende doet zich voor: ik ben een kleine servermanager aan 't bouwen voor Counter-Strike. Hij leest de master-server keurig uit. Als ik dubbelklik op een server voert hij onderstaande ShellExecute uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TMainform.Join(const Index: integer);
var
        MyFile, MyParameters, MyDefaultDir: string;
begin
        RichEdit1.Lines.Add('Connecting to ' + FServerlist.GetHostPort(Index));
        MyFile := 'C:\SIERRA\Half-Life\hl.exe';
        MyParameters := '-console -game cstrike +connect '
                + FServerlist.GetHostPort(Index);
        MyDefaultDir := 'C:\SIERRA\Half-Life';
        ShellExecute(
                Handle,
                'open',
                PChar(MyFile),
                PChar(MyParameters),
                PChar(MyDefaultDir),
                SW_SHOWNORMAL);
end;

FServerlist.GetHostPort(Index) geeft de server in formaat "ipadres:poort" terug.

Het connecten lijkt prima te gaan: de motd etc komt voorbij, het duurt even, de console schuift dan omhoog, je ziet onderaan al een klein stukje van 't level en *PLOEP*, dan schiet hij terug naar Windows, zonder foutmelding oid. Ook zie ik geen rare meldingen in de console, ook niet vlak voordat hij exit. Ik heb met "+log on" een log laten aanmaken maar dat wordt een leeg tekstbestand.

De server is niet vol of iets dergelijks. Gewoon 'connect <hier het IP-adres>' in de console intypen gaat wel goed, net als het veranderen van de shortcut in Windows (+connect host:port erachter). Ik vraag me dus af wat er anders is aan mijn ShellExecute. De handle heb ik al eens veranderd in Application.Handle, SW_SHOWNORMAL heb ik al eens veranderd in SW_SHOW, maar niets helpt.

Ik snap er geen hout van. Rara wat doe ik fout? :?

[edit]
Als ik de executable in C:\SIERRA\Half-Life zet werkt het wel goed! :?

[ Voor 13% gewijzigd door Bergen op 04-09-2003 07:48 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Als je 'm via CreateProcess lanceert kun je de stack- en heapsizes geloof ik verhogen, wellicht dat dat helpt?

Professionele website nodig?


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 18-08 10:58

Bergen

Spellingscontroleur

Topicstarter
Ik zie daar niets staan over stack- en heapsizes, maar het verklaart volgens mij ook niet waarom hij het wel doet als de executable in de HL-dir staat. De stack- en heapsizes zouden dus wel in orde moeten zijn. Ik heb het wel toch even geprobeerd via CreateProcess, maar dat leverde helaas precies hetzelfde op... (mbv deze site)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        FillChar(StartInfo, SizeOf(TStartupInfo), #0);
        FillChar(ProcInfo, SizeOf(TProcessInformation), #0);
        StartInfo.cb := SizeOf(TStartupInfo);
        CreateOK := CreateProcess(
                nil,
                PChar(MyFile + ' ' + MyParameters),
                nil,
                nil,
                False,
                CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS,
                nil,
                PChar(MyDefaultDir),
                StartInfo,
                ProcInfo);

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

(ik had je edit niet gelezen :P )

Een child process inherit de current directory van het parent process. Een simpele SetCurrentDirectory op de half-life directory zou al wonderen kunnen doen.

Professionele website nodig?


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 18-08 10:58

Bergen

Spellingscontroleur

Topicstarter
Helaas...

SetCurrentDir (MyDefaultDir) en SetCurrentDirectory (PChar(MyDefaultDir)) geprobeerd maar ze resulteren in 't zelfde. Ook nog een \ achter de directory geprobeerd (ja, je moet wat...) maar dat helpt ook niet.

Bah.

[edit1] ChDir ook gevonden, doet ook weinig.

[edit2] Aan de documentatie van CreateProcess te zien (bij het stukje waar wordt uitgelegd in welke volgorde hij om de exe zoekt als de map niet bekend is), is de directory waaruit de exe is geladen iets anders dan de CurrentDirectory. Misschien ligt het daaraan.

[edit3] Het lijkt vreemd, maar ik begin te vermoeden dat hij kijkt naar ParamStr(0). Daar staat de originele directory in. Ik heb een testapp gemaakt die de CurrentDir en ParamStr(0) weergeeft en als ik die vanuit m'n launcher aanroep toont hij bij CurrentDir de Half-Life dir en bij ParamStr(0) de echte dir.

[ Voor 68% gewijzigd door Bergen op 04-09-2003 13:39 ]