Avatar billede powerj Nybegynder
20. marts 2007 - 16:25 Der er 6 kommentarer

Exe filer i c++

X Hej,

Jeg har brug for at kunne åbne en fil, og når den er installeret, skal der åbnes en anden fil.

Hvordan gøres dette typisk?

Her er et uddrag fra min kode:

if (bNetfx11Installed)       
    {
        ShellExecute(NULL, _T("open"), _T("installtool.exe"), NULL, NULL, SW_SHOWNORMAL);
    }
    else
    {
        if (language = 1)
        {   
            if (MessageBox(NULL, _T("Microsoft .NET Frameworks mangler for at kunne fortsætte installationen. \rInstallér nu?"), _T("The .NET Framework 1.1"), MB_YESNO | MB_ICONINFORMATION)==IDYES)
            {       
                ShellExecute(NULL, _T("open"), _T("dotnetfx.exe"), NULL, NULL, SW_SHOWNORMAL); 
            }
        }
Avatar billede yates Nybegynder
20. marts 2007 - 17:13 #1
Hej

Dit problem er formodentlig at du ikke kan åbne fil2 før fil1 er installeret. ShellExecute som ovenfor venter ikke på at du er færdig.
Jeg bruger denne funktion:

int ShellExAndWait(char* file, char* params)
{
    SHELLEXECUTEINFO info;
    memset(&info, 0, sizeof(info));
    info.cbSize = sizeof(info);
    info.lpVerb = "open";
    info.lpFile = file;
    info.lpParameters = params;
    info.fMask = SEE_MASK_NOCLOSEPROCESS;
    info.nShow = SW_SHOWMINIMIZED;
    ShellExecuteEx(&info);
    WaitForSingleObject(info.hProcess,  INFINITE);
    return(1);
}

Hvis du kører fil1 gennem denne funktion så venter den indtil ShellEx er færdig. Og så kan fyre fil2 af som det passer dig (men du vælger selvfølgelig samme funktion igen).

Y.
Avatar billede yates Nybegynder
20. marts 2007 - 17:15 #2
I øvrigt,
når du skriver "if (language = 1)"
mener du så ikke "if (language == 1)" ????

Y.
Avatar billede powerj Nybegynder
20. marts 2007 - 20:08 #3
Super, det prøver jeg lige.
Og jo du har ret, det er selvfølgelig ==.

Hvis du smider det som et svar istedet for en kommentar, får du lige point
Avatar billede powerj Nybegynder
20. marts 2007 - 23:05 #4
Kan jeg forresten bruge det til at teste om installationen blev afbrudt??
Avatar billede yates Nybegynder
21. marts 2007 - 08:51 #5
Hmmm..... det ved jeg faxisk ikke.
Det ville være ønskeligt om ShellExAndWait kunne returnere 1 for afbrudt og 0 for succes (eller omvendt) men jeg kan ikke se om det kan lade sig gøre.
WaitForSingleObject venter bare, ikke andet.

Hvis du selv programmerer fil1, så kunne du evt. sørge for at den laver en tekstfil (eller skriver til registry) hvis indhold er afhængigt af succesfuld installation. Så kan du efter ShellExAndWait inspicere din tekstfil for at tjekke om der er fejl eller afbrydelser og så tage den derfra.

Hvis du ikke selv programmerer fil1, så kan det tænkes du alligevel kan redde den. Mange installers skriver en install-log som indeholder netop den info du skal bruge for at tjekke om install. er succesfuld.

Y.
Avatar billede powerj Nybegynder
21. marts 2007 - 13:55 #6
Ja, jeg tjekker på registreringsværdien, det løser mit problem.

Mange tak for hjælpen med ShellExAndWait :o)
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