Page 1 sur 1

[R] Dossier temporaire autovidable

Posté : jeu. 02 avr. 2015 17:27
par walkson
[Edit] j'ai modifié le titre car je suis bien loin du lecteur virtuel :roll:

Bonjour,
Je cherche le moyen de créer un lecteur virtuel
Le but de la manœuvre est d'effacer à la fermeture de la session (ou du PC) tous les fichiers qu'il contient.
Toutes autres méthodes ayant le même but me convient (dossier temporaire ou autre)
Merci de votre aide

Re: [..] Créer un lecteur virtuel

Posté : jeu. 02 avr. 2015 19:16
par orax
Si la quantité de données temporaires à stocker n'est pas importante , il y a la possibilité de les stocker en RAM => ram disk.

Re: [..] Créer un lecteur virtuel

Posté : ven. 03 avr. 2015 08:26
par walkson
Bonjour,
Hélas, les données peuvent être très importantes, plusieurs gigas.

Re: [..] Créer un lecteur virtuel

Posté : ven. 03 avr. 2015 09:13
par jguinch
S'il s'agît d'un lecteur virtuel, les données devront bien être stockées quelque part :roll:
Un ramdisk sera très rapide, vidé au reboot, mais limité en taille (en fonction de la quantité de RAM dont du disposes)

Comme autre solution, tu peux avoir par exemple :
- Fichier VHD ( + tâche planifiée au boot pour formater le disque rapidement) - à partir de Windows 7
- Lecteur virtuel avec la commande SUBST ( + tâche planifiée au boot pour supprimer le contenu du répertoire et créer le lecteur)

Re: [..] Créer un lecteur virtuel

Posté : ven. 03 avr. 2015 09:21
par TommyDDR
Pourquoi pas un simple sous dossier qui serait supprimé ?

Vous pouvez aussi aussi utiliser la commande subst pour faire d'un sous dossier un "disque dur virtuel" que vous pouvez vider à chaque fermeture de session

Code : Tout sélectionner

subst h: c:\dossier
Cela crééra un lecteur h: pointant sur c:\dossier

EDIT : gillé par jguinch :(

Re: [..] Créer un lecteur virtuel

Posté : ven. 03 avr. 2015 11:09
par walkson
Je me suis mal exprimé en disant "lecteur virtuel". :oops:
En fait, c'est une sorte de poubelle qui se vide à la fin de la session que je souhaite.
(J'ai réalisé un petit programme qui me détruit les fichiers que je n'ai plus besoin. Le problème est que si je fais une erreur, impossible de récupérer ce fichier, d'où l'idée de cette poubelle)
TommyDDR a écrit :Pourquoi pas un simple sous dossier qui serait supprimé ?
C'est, je pense, la meilleure idée mais comment faire sans avoir un script en boucle qui détecte la fin de session et vide le dossier ?
Et en passant par les taches planifiées, comment automatiser cette tache ? sachant que ce programme peut être installé sur plusieurs ordinateurs.

Re: [..] Créer un lecteur virtuel

Posté : ven. 03 avr. 2015 14:44
par jguinch
Il faudra que tu créés un programme d'installation de ton application qui, en même temps qu'il installe de programme, créé une tâche planifiée.
Tu peux créer cette tâche planifiée en exécutant la commande externe schtasks.exe :

Code : Tout sélectionner

Run(@SystemDir & '\schtasks.exe /create /tn "PurgeTempDir" /tr "c:\scripts\purge.exe ""c:\temp""" /sc ONLOGON ', @SystemDir, @SW_HIDE)
 
Et tu créés un script purge.exe qui s'occupe de purger le répertoire voulu :
► Afficher le texte

Re: [..] Créer un lecteur virtuel

Posté : ven. 03 avr. 2015 17:05
par walkson
Je viens de tester tes scripts, jguinch , et ça marche impeccable.
Je n'ai qu'un regret, c'est que la tache planifiée démarre à l'ouverture de la session et non à la fin (problème de confidentialité)
J'ai cherché et testé pour une tache en fin de session mais sans résultat... Je me débrouille peut être comme un manchot ?
Si quelqu'un a une idée je suis preneur.
En tout cas, jguinch, merci pour cette solution.

Re: [..] Créer un lecteur virtuel

Posté : ven. 03 avr. 2015 19:31
par orax
Je n'ai pas vu de ONLOGOFF ou ONLOGOUT, ça ne doit pas exister donc je pense qu'il faut spécifier manuellement un événement. Dans ce cas, l'événement à choisir serait Winlogon, ID 7002 (il peut être trouvé dans l'observateur d'événements > Système). On peut créer la tâche depuis la ligne de commande ou la créer avec taskschd.msc et exporter un fichier XML qui servira de modèle. Détails ici => http://superuser.com/a/615728
Le XML en P.J. peut être importé depuis taskschd.msc.

Re: [..] Créer un lecteur virtuel

Posté : sam. 04 avr. 2015 07:25
par jguinch
schtasks.exe dispose de l'option ONEVENT, qui pourra faire que la tâche s'exécute sur un événement particulier (7002 ici).
Ce qui m'interpelle, c'est le fait de vouloir absolument lancer le script à la fermeture de session. Si le PC s'arrête brutalement, la tâche ne s’exécutera pas. Alors qu'une ouverture de session aura toujours lieu, d'où ma précédente suggestion.
Sinon, tu peux regarder du côté des scripts d'ouverture/fermeture de session : (HKLM |HKCU)\Software\Policies\Microsoft\Windows\System\Scripts\Logoff, mais je ne garanti rien sur les versions Windows familial.

Re: [..] Créer un lecteur virtuel

Posté : sam. 04 avr. 2015 07:26
par jguinch
schtasks.exe dispose de l'option ONEVENT, qui pourra faire que la tâche s'exécute sur un événement particulier (7002 ici).
Ce qui m'interpelle, c'est le fait de vouloir absolument lancer le script à la fermeture de session. Si le PC s'arrête brutalement, la tâche ne s’exécutera pas. Alors qu'une ouverture de session aura toujours lieu, d'où ma précédente suggestion.
Sinon, tu peux regarder du côté des scripts d'ouverture/fermeture de session : (HKLM |HKCU)\Software\Policies\Microsoft\Windows\System\Scripts\Logoff, mais je ne garanti rien sur les versions Windows familial.

Re: [..] Créer un lecteur virtuel

Posté : sam. 04 avr. 2015 18:01
par walkson
Bonjour,
Après une multitude d'essais, je me suis rabattu sur la solution d'Orax en modifiant les chemins et le userid comme ceci: <UserId>SYSTEM</UserId>. A priori, cela devrait passer partout.
Un petit coup de Run(@SystemDir & '\schtasks /Create /TN "PurgeONEVENTxml" /XML "C:\Users\Pc\Desktop\purgeWindows-Winlogon_7002.xml"', @SystemDir, @SW_HIDE) et l'affaire est dans le sac.
Et cette solution rejoint mon souhait et la proposition de jguinch puisqu'elle agit en début et fin de session.
J'aurais préféré cette solution

Code : Tout sélectionner

Run(@SystemDir & '\schtasks.exe /create /tn "PurgeONEVENT" /tr "C:\purge\purge.exe ""c:\temp""" /sc ONEVENT /EC System  /MO "*[System[Provider[@Name=''Microsoft-Windows-Winlogon''] and (EventID=7002)]]" /F', @SystemDir, @SW_HIDE)
mais la tache échoue. L’échec doit être du au fait que la case "exécuter même si l'utilisateur n'est pas connecté" n'est pas coché et impossible de savoir le faire en command line. Si quelqu'un a la solution, je prends !
Il me reste plus qu'à modifier mon programme "Delete" pour envoyer fichiers et dossiers dans le Temp
Merci à Orax et jguinch pour leur aide

Re: [R] Dossier temporaire autovidable

Posté : sam. 04 avr. 2015 19:00
par orax
Il faut ajouter /RU "" pour utiliser le compte système. Dans ce cas l'utilisateur n'aura pas besoin d'être connecté.
L'avantage du fichier XML est qu'il contient plusieurs déclencheurs : celui à la fermeture de la session et un autre au démarrage de l'ordi. Je n'ai pas trouvé comment faire la même chose depuis la ligne de commande (sans l'import du XML).
Il y a aussi FileInstall() qui pourrait être utile pour embarquer et extraire le .XML depuis purge.exe.

Re: [R] Dossier temporaire autovidable

Posté : lun. 06 avr. 2015 22:53
par walkson
Bonsoir,
Avec /RU "" en effet ça marche très bien mais finalement j'ai utilisé le XML car je n'ai pas trouvé non plus une solution avec plusieurs déclencheurs. Voilà le script final:
► Afficher le texte
En écrivant le XML comme une fonction, cela m'a permis de rajouter les chemins sous forme de macro. Par contre, j'ai du modifier mon programme "delete" pour renommer les éléments déplacés dans le Temp à cause des doublons. Le script de jguinch marche à merveille et il est très rapide, on ne le remarque même pas malgré les 8 GO d'essai.
Encore merci à vous deux pour votre aide.