Sådan genstartes en konsol c-applikation skrevet i Windows?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger MSVS 2008. Jeg skriver en ansøgning i c, og vil gerne vide, hvad der er den bedste måde at genstarte en applikation i Windows.


Jeg kiggede rundt og nogen gjorde noget som dette, men jeg er ikke sikker på, om det er den bedste måde, eller hvis der endda skaber en helt ny proces.


    if(command == restart)
    {
        printf("program exiting!
");
        Sleep(2000);
        system("cls");

        WinExec("my\_app.exe", SW\_SHOW);
        exit(0);
    }


Tak

Bedste reference


Du bliver nødt til at have en proces ekstra til dette.


Fra din ansøgning lancerer du den proces. Den venter på, at din hovedapplikation afslutter, så vent på hvad det skal ske (opdatering, ...) og genstart det, så du dræber selv.


Start app fra sig selv vandt ikke ok siden du vandt kan ikke opdatere noget.

Andre referencer 1


Kort svar: Det ser godt ud for mig, men hvis du er bindende til stikkontakter, er der en rigtig lille chance for, at dine to programmer kan kollidere før forældreafslutningen () s.


Jeg er bange for at spørge om 'den bedste' måde, der kommer til at producere en af ​​disse 'its kontekstafhængige' svar.


For at starte, ifølge MSDN-dokumenterne på WinExec, 'Denne funktion er kun tilgængelig for kompatibilitet med 16-bit Windows. Programmer skal bruge CreateProcess-funktionen'. Dette indebærer, at det er en 'funktion-wrapper' for en 'exec' -lignende funktion. Selvfølgelig CreateProcess er en slags monster, kun MS ville skabe, men hvis denne applikation vil være overhovedet vigtig, bør rådene sandsynligvis tages. [2] [3]


Interessant nok nævner MS i docs for CreatProcess at 'den foretrukne måde at lukke en proces på er at bruge funktionen ExitProcess.'


Så du kan se, ligesom med så mange problemer, er der mange løsninger. Spørgsmål til svar, der kan skinne svarene her ville være:



  • er du interesseret i
    platform-uafhængighed?

  • Er du interesseret i sikkerhed?

  • Er du meget interesseret i dette?
    programmet skal tage?



etc.


Jeg håber det hjælper dig ud!

Andre referencer 2


Her er nogle dumme eksempler på, hvordan man starter regnemaskinen.


STARTUPINFO startUpInfo={0};

PROCESS\_INFORMATION procInfo={0};


startUpInfo.cb=sizeof (startUpInfo);


mens (1)

{

  CreateProcess (L 'C: \ windows \ System32 \ calc.exe', NULL, NULL, NULL, FALSE, 0, NULL, NULL, &startUpInfo, &procInfo);


WaitForSingleObject (procInfo.hProcess, INFINITE);

}


Som du kan se, starter dette en ny proces 'calc.exe'. Det vil vente på, at det afsluttes, og starte det hele igen. Husk på, at jeg ikke lukkede nogen håndtag her !!!