windows - Sådan forhindrer du filer, der er oprettet med GetTempFileName, bliver automatisk slettet efter genstart

Indlæg af Hanne Mølgaard Plasc

Problem



Vores ansøgning indsamler data fra en ekstern enhed. Disse data befinder sig primært i hukommelsen, men spoles til disk i midlertidige filer, indtil brugeren eksplicit gemmer dataene. Dette er at give en chance for tilbagesendelse, hvis applikationen styrter af en eller anden grund. Generelt fungerer det bare fint.


I det seneste har vi opdaget, takket være, at Windows bliver mere kraftfuldt om automatiske opdateringer, at disse filer bliver slettet automatisk under en genstart. Så hvis Windows dræber vores applikation for automatisk at anvende opdateringer, er de midlertidige filer, der ville have tilladt genoprettelse, gået efter genstart .


Jeg har testet problemet ved at dræbe ansøgningen med vilje og genstart, og de midlertidige filer er forsvundet efter genstart.


Filerne oprettes ved hjælp af Win32 API-opkaldet GetTempFileName sammen med GetTempPath. Alt jeg har læst om emnet siger, at disse filer er ikke automatisk slettet nogensinde, men de bliver klart slettet.


Hvad kan jeg gøre for at stoppe dette? Eller skal jeg bare ændre hvor vores sikkerhedsdata er gemt?

Bedste reference


Den bedste løsning IMO bruger ikke den midlertidige mappe, der indeholder (som navnet antyder) midlertidige filer, der kan slettes uden konsekvenser.


I stedet skal du gemme dem et eller andet sted i mappen LocalAppdata.


Brug SHGetFolderPath-funktionen til at hente den aktuelle placering af LocalAppData-mappen. [5]


I LocalAppData opretter du en mappe, hvis navn er dit firma og/eller produktnavn eller en kombination af begge og gemmer alle dine pseudo midlertidige filer der.

Andre referencer 1


Hvad du ser er en ny 'Storage Sense' -funktion tilføjet i Windows 10.


Sådan slettes midlertidige filer automatisk i Windows 10. [6]



  Windows 10 har evnen til at rydde midlertidige filer automatisk i en nyere build. Med start 15014 blev der vist en ny mulighed i Indstillinger.



image [7]


Når den er aktiveret, kan den indstilles til at rydde elementer som midlertidige filer, papirkurven osv. Du kan slå dem af individuelt.


image [8]


image [9]


Alternativt ville en anden mulighed være at ændre din app for at gemme sine midlertidige filer i en ikke-system-tempmappe, som du kontrollerer, i stedet for at bruge GetTempPath(). Og brug måske også noget andet end GetTempFileName() for at oprette dine midlertidige filnavne (f.eks. Brug af dato/tider eller vejledninger i stedet), så Windows kan ikke spore de midlertidige filer, du opretter. Så vil dine filer måske ikke blive slettes automatisk af Storage Sense længere.