Avatar billede petersss Nybegynder
12. februar 2007 - 14:25 Der er 18 kommentarer og
2 løsninger

Embedde filer i binary

Jeg ønsker i Visual C++ at vedlægge et par filer i exe filen, som "pakkes ud" under kørsel af programmet. Kompression er ikke et krav.
Avatar billede the_fox Nybegynder
12. februar 2007 - 16:16 #1
Bertel Brander lavede følgende eksempel til mig på et tidspunkt, det kan eventuelt bruges til inspiration.

http://home20.inet.tele.dk/midgaard/starter.zip
Avatar billede the_fox Nybegynder
12. februar 2007 - 16:20 #2
Her er linket til det spørgsmål jeg stillede: http://www.eksperten.dk/spm/720742
Avatar billede bertelbrander Praktikant
12. februar 2007 - 19:47 #3
Koden som the_fox linker til burde uden videre kunne bruges med VisualC++.

Jeg kan evt. lave et projekt til VisualC++, hvilken version bruger du?
Avatar billede petersss Nybegynder
12. februar 2007 - 21:22 #4
2005 :)
Avatar billede bertelbrander Praktikant
12. februar 2007 - 22:02 #5
Avatar billede petersss Nybegynder
17. februar 2007 - 03:29 #6
Det fungerer jo fint :) Har lige een til ting. Hvis jeg gerne vil udpakke filerne i %temp%,  hvordan gøres dette?
Jeg kan forstå du ikke vil have point?
Avatar billede the_fox Nybegynder
17. februar 2007 - 10:53 #7
måske:
 
FILE* ExeFile = fopen("C:\\temp\\somename.exe", "wb");
Avatar billede the_fox Nybegynder
17. februar 2007 - 10:58 #8
Eller hvis de skal udpakkes i "midlertidige internetfiler"

TCHAR strPath[MAX_PATH] = {0};
                    if (SHGetSpecialFolderPath(NULL, strPath, CSIDL_INTERNET_CACHE, false)) {
                        path = _tcscat(strPath, _T("\\somename.exe"));
                    }
                    FILE* ExeFile4 = fopen(path, "wb");
Avatar billede the_fox Nybegynder
17. februar 2007 - 10:59 #9
hov der havde lige sneget sig et firetal ind:

TCHAR strPath[MAX_PATH] = {0};
                    if (SHGetSpecialFolderPath(NULL, strPath, CSIDL_INTERNET_CACHE, false)) {
                        path = _tcscat(strPath, _T("\\somename.exe"));
                    }
                    FILE* ExeFile = fopen(path, "wb");
Avatar billede the_fox Nybegynder
17. februar 2007 - 11:00 #10
Her kan du se alle de "specielle" mapper (f.eks. CSIDL_INTERNET_CACHE):

http://msdn2.microsoft.com/en-us/library/ms649274.aspx
Avatar billede petersss Nybegynder
17. februar 2007 - 13:56 #11
Hehe, temporary internet files er nok ikke helt det rigtige dir at smide disse ting. Det ville nok være mere korrekt at gå i brugerens egen temp folder, altså den folder du havner i hvis du i konsollen skriver 'cd %temp%'.
Den kan jeg ikke finde i den liste du har sendt til mig...
Men jeg klarer mig nok med temporary internetfiles :) Vil du have lidt point?
Avatar billede petersss Nybegynder
17. februar 2007 - 16:07 #12
Hmm, temporary internet files er ikke helt god, da der kommer en popup når man starter en exe fil der ligger i temporary internet files. Jeg skal altså have fat i %temp%...
Avatar billede bertelbrander Praktikant
17. februar 2007 - 16:46 #13
getenv("temp") bør give dig temp mappen.
Avatar billede the_fox Nybegynder
17. februar 2007 - 16:54 #14
Du kan ikke bruge denne så?: CSIDL_LOCAL_APPDATA

C:\Documents and Settings\username\Local Settings\Application Data.

Jeg ved godt at det ikke er temp, men jeg googlet lidt på tempfolderen, men kan ikke rigtig finde noget.
Avatar billede the_fox Nybegynder
17. februar 2007 - 16:59 #15
hehe der kan man bare se :)
Avatar billede petersss Nybegynder
17. februar 2007 - 18:17 #16
Når jeg bruger getenv får jeg det rigtige dir, men i old school formatet non-8dot3. Dette gør skam ikke noget, bortset fra at kaldet til CreateProcess åbner nu en konsol og spytter en fejl ud med titlen "16-bit ms-dos subsystem" istedet for at køre den udpakkede fil. Det jeg ønsker er altså at lægge resourcen i temp dir'et, og derefter køre denne...
Avatar billede petersss Nybegynder
17. februar 2007 - 18:31 #17
Ignorer den forrige besked. Det var vist ikke min egen exe der blev kørt, men en tilfældig anden exe med samme navn i temp diret :)
Avatar billede petersss Nybegynder
17. februar 2007 - 21:26 #18
Det virker fint med getenv :) Tak for hjælpen!
Avatar billede petersss Nybegynder
17. februar 2007 - 22:54 #19
Bertelbrander du vil ikke have point, men the_fox vil du gerne have lidt point for din tid?
Avatar billede the_fox Nybegynder
18. februar 2007 - 10:20 #20
Tja... det er op til dig, jeg vil ikke nasse :)
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