Avatar billede videodyr Nybegynder
30. maj 2002 - 10:00 Der er 6 kommentarer og
1 løsning

system

Jeg har et problem med min kode, den vil ikke åbne programmet mysqld....

Hvad skal jeg gør for at kunne åbne programmet??

TRegistry *Registry = new TRegistry;
try
{
Registry->RootKey = HKEY_LOCAL_MACHINE;
Registry->OpenKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\yourapp.Exe", false);
mysql = Registry->ReadString("Path");
}
__finally
{
  delete Registry;
        }
      if(mysql !="")
        {
        system = mysql+"\\bin\\mysqld";
        system(system.c_str());
        i = 1;
        }
      else
        {
        i = 0;
        };
Avatar billede borrisholt Novice
30. maj 2002 - 10:07 #1
brug ShellExecute i stedet !

Jens B
Avatar billede laffe Nybegynder
30. maj 2002 - 10:36 #2
Hvad står der i din 'Path' variable ?

Lige umiddelbart, så vil jeg mene, at du skal angive '\\' i din streng.
Registry->OpenKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\yourapp.Exe", false);
Avatar billede videodyr Nybegynder
30. maj 2002 - 10:49 #3
Hejsa laffe!!

Jeg har angivet alt med "\\"....
Det kom bare ikke med her på eksperten af en eller anden grund.
Avatar billede kamikaze Nybegynder
30. maj 2002 - 11:09 #4
Hvis du bare ønsker at køre et andet program, så brug ShellExecute som borrisholt siger:


#include <windows.h>
#include <iostream.h>
#include <conio.h>

void RunProgram(char* pszAppName, char* pszParams)
{
    ShellExecute(NULL,
                "open",
                pszAppName,
                pszParams,
                NULL,
                SW_SHOW);
}

int main()
{
    cout << "Press any key to launch notepad..." << endl;
    getch();
    RunProgram("notepad.exe", NULL);
    cout << "Press any key to terminate..." << endl;
    getch();
    return 0;
}
Avatar billede soepro Nybegynder
30. maj 2002 - 11:14 #5
Jeg forstår ikke hvordan du kan have både en variabel der hedder system og dernæst kalde en funktion der også hedder system() - det tillader min compiler ikke.

system() er et kald til 'command.com', så den "kommando" du giver system, skal være en man kan skrive fra et DOS-prompt. Jeg har selv oplevet "uforklarlige" problemer med at få system() til at fungere, og bruger derfor altid spawnl() i stedet:

spawnl(P_WAIT, system.c_str(), system.c_str(), /* hvis ingen parametre*/ NULL);

Jeg ville også debugge mit program lige inden kaldet, for at checke hvad der rent faktisk står i system. (Eller lave en printf("Kalder: \'%s\'\n", system.c_str()); lige inden spawnl kaldet.)
Avatar billede soepro Nybegynder
30. maj 2002 - 11:19 #6
Hvis det er programmet egen path du mangler, kan du læse den i programmets 1. parameter og vha. fnsplit() trække path ud:

int main(int argc, char* argv[])
{
  char myPath[MAXPATH];
  char cmd[MAXPATH];
  fnsplit(argv[0], /* Drive not needed */ NULL, myPath, /* File not needed */ NULL, /* Extention not needed. */ NULL);
  sprintf("%s%s", myPath, argv[1] /* Navn på faktisk program der skal kaldes. */); 

  return spawnl(P_WAIT, cmd, cmd, NULL);
}
Avatar billede videodyr Nybegynder
30. maj 2002 - 11:40 #7
Jubiiiiiiiiiii.

Hjesa soepro...
Nu virker det.

Hvis man nu skifter navn på variabel til f.eks. mysqlrun så virker det, Så du havde rigtigt i det med variabel...

Mange tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester