IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

[Vista] supprimer fichier en Program Files


Sujet :

Delphi

  1. #1
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut [Vista] supprimer fichier en Program Files
    Bonjour

    Sous Vista, pas moyen de supprimer un fichier tout simple en extension .txt !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
     DeleteFile('C:\Program Files\Toto\Riri.txt);
    ...
    Je pensais que la variable d'affectation au path était... mais non, même ce chemin écrit en dur, c'est pareil

    Je teste pourtant auparavant son existence, etc. mais rien à faire ; Incroyable, non ?

    Hé oui, je sais très bien que Vista protège aussi ce dossier sensible, mais tout de même.

    Si vous avez des idées, merci

    PS : UAC active.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Citation Envoyé par Droïde Système7 Voir le message
    PS : UAC active.
    Ben voila je pense que ça répond à ton interrogation. Lorsque l'UAC est actif tu ne peux rien faire du tout sur le répertoire Program Files (et sous-répertoire) à moins d'élever les droits (j'imagine car je ne suis pas du tout un expert dans ce domaine).
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  3. #3
    Membre habitué Avatar de neodelphi2007
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 202
    Points : 179
    Points
    179
    Par défaut
    Bonjour,

    Cet article "L'UAC et Delphi" de Pascal Fonteneau peut t'aider:

    http://pascalfonteneau.developpez.co...phi/vista/uac/

  4. #4
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Citation Envoyé par neodelphi2007 Voir le message
    Bonjour,

    Cet article "L'UAC et Delphi" de Pascal Fonteneau peut t'aider:

    http://pascalfonteneau.developpez.co...phi/vista/uac/
    Bonsoir,

    En effet, j'avais déjà lu ce tuto, que d'ailleurs je viens de relire tranquillement.

    Par contre, je n'arrive toujours pas à trouver comment faire pour supprimer un malheureux fichier texte en Program Files.

    Logiquement en partant de ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    procedure RunAsAdmin(hWnd : HWND; aFile : String; aParameters : String);
    Var
     Sei : TShellExecuteInfoA;
    begin
     Fillchar(sei,SizeOf(sei),0);
     sei.cbSize := SizeOf(sei);
     sei.Wnd    := hWnd;
     sei.fMask  := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
     sei.lpfile := PChar(aFile);
     sei.lpVerb := 'runas';
     sei.lpParameters := PChar(aParameters);
     sei.nShow := SW_SHOWNORMAL;
     if not ShellExecuteEx(@sei) then
      RaiseLastOSError;
    end;
    ensuite, je ne sais pas du tout
    En pied de tuto figure ceci :
    Epilogue
    Lors de la recherche du fond pour cet article, je me suis aperçu que bien souvent des personnes recherchent un bug dans le moteur du BDE, la registry ou des opération E/S (DeleteFile, CreateFile, Registry ) alors que c'est simplement la redirection des opérations d'écriture vers le dossier virtualstore qui fausse l'exécution. Alors, je rajoute volontairement ce petit épilogue, afin que le moteur de recherche du site indexe aussi cet article pour les mots BDE, Registry, DeleteFile et CreateFile.
    DeleteFile(), hé oui mais plus encore...

    Edit :

    Je viens par exemple, via l'appel d'un bouton de faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    RunAsAdmin(DeleteFile('C:\Program Files\suite de mon chemin... 
    ...
    Mais erreur : Types incompatibles : 'HWND' et 'Boolean'

    Ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RunAsAdmin(Self.Handle, DeleteFile('C:\Program Files\mon chemin...
    [Erreur] Types incompatibles : 'String' et 'Boolean'

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Le plus simple est d'associer un manifest à ton exécutable spécifiant qu'il requiert des droits administrateur :

    http://developersoven.blogspot.com/2...i-part_27.html

    Ceci fait, aucun changement dans ton code ne sera nécessaire, mais ton application ne sera lancée que si l'utilisateur consent manuellement à le faire.
    "It's more fun to compute !"

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 961
    Points
    40 961
    Billets dans le blog
    62
    Par défaut
    je sais que c'est tout bête mais as-tu essayé le chemin
    'C:\programmes\......'

    pour ce qui est de RunasAdmin , HWND est un handle de fenêtre
    pas un appel de fonction , ensuite tu indiques un nom de programme puis ses paramètres , c'est un peu comme ShellExecute

    exemple (et encore je n'en suis pas sur)
    RunasAdmin(monHandle,'monprogramme.exe','param1,param2');
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonjour

    Merci de vos idées ; question manifest, si je peux passer à côté, ce serait mieux et plus élégant je trouve.

    Le chemin en ...Programmes... ne passe pas, pas fou le Vista
    Ça figure en barre de chemin relatif visible, mais pas en chemin "dur".

    Sergio, je crois en effet que nous sommes sur le bon chemin avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RunAsAdmin(Form1.Handle, DeleteFile(chemin),X;
    Par contre au niveau du dernier paramètres (noté X), c'est du type String aParameters, là je ne sais quoi écrire...

    @+

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 961
    Points
    40 961
    Billets dans le blog
    62
    Par défaut
    X moi je mettrai null ou nil ou ''
    mais deletefile est une fonction , je ne pense pas que cela va fonctionner
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    C'est curieux, au moment de l'écriture, je laisse le curseur après la virgule et là je vois le hintage qui me guide. Il indique bien ce dernier paramètre à ajouter est le aParameters.

    J'ai tenté Nil, Null, 0, '0', '1', 1 ; mais que dalle.

    En fait, en compillant, le curseur se place juste après cette fameuse virgule avant le paramètre en question et toujours le même message d'erreur :
    Types incompatibles : 'String' et 'Boolean'

    Bref, comme s'il se fichait de l'endroit de ce fameux aParameters...

    @+

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 961
    Points
    40 961
    Billets dans le blog
    62
    Par défaut
    "mais bon dieu oui bien sur" dirait Bourrel dans les "5 dernières minutes" <- télé des années Soixante

    DeleteFile est une fonction qui renvoi un Boolean , c'est bien ce que je disais tu ne peut pas mettre une fonction , il faut que cela soit une commande

    je suggererais quelque chose comme

    RunAsAdmin(Form1.Handle,'Cmd','Del '+chemin);

    mais cela va être moche
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    L'inspecteur Bourrel, tu penses si j'me souviens !

    Je viens de tester ta ligne, mais l'UAC intervient et demande la permission.

    En plus ça pointe sur la console en C:\Windows\System et le curseur attend...

    @+

    Edit : Si seulement InnoSetup prenait en compte le {userappdata}, mais avec Vista et son UAC ; c'est directo pointé vers le compte admin.
    Vivement la prise en compte de Vista par InnoSetup...

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Merci de vos idées ; question manifest, si je peux passer à côté, ce serait mieux et plus élégant je trouve.
    Le manifest est la solution la plus élégante et celle exclusivement conseillée par Microsoft. Un programme doit faire des tâches d'administration sous Vista ? Il faut lui coller un manifest.

    De toute façon même si tu veux pas le faire, il faudra impérativement que l'utilisateur valide un popup UAC pour que tu puisses faire cette suppression. Donc autant que ce soit ton application qui le demande plutôt qu'une autre...

    Edit : Si seulement InnoSetup prenait en compte le {userappdata}, mais avec Vista et son UAC ; c'est directo pointé vers le compte admin.
    Vivement la prise en compte de Vista par InnoSetup...
    Je ne comprends pas trop... Dans Program Files, tu est censé installer les binaires de tes applications. Point barre. Pas les fichiers de conf, pas de trucs modifiables, suppressibles, etc. Donc si tu vas à l'encontre de cette "règle" c'est normal que tu aies l'impression de galérer
    "It's more fun to compute !"

  13. #13
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonsoir,


    J'ose me citer :
    Edit : Si seulement InnoSetup prenait en compte le {userappdata}, mais avec Vista et son UAC ; c'est directo pointé vers le compte admin.
    Vivement la prise en compte de Vista par InnoSetup...
    Adrien répondait :
    Je ne comprends pas trop... Dans Program Files, tu est censé installer les binaires de tes applications. Point barre. Pas les fichiers de conf, pas de trucs modifiables, suppressibles, etc. Donc si tu vas à l'encontre de cette "règle" c'est normal que tu aies l'impression de galérer
    En fait tout ce problème vient à "cause" d'Inno Setup qui sous Vista avec... UAC, ne prend aucunement en compte le {userappdata} et pointe alors directo sur le compte admin.

    Car l'idéal à l'install aurait été qu'un fichier texte soit placé directo en ...\Users\NameUser\AppData\Roaming\... Mais à cause de cette impossibilité de IS, je ruse (via le premier lancement de mon appli) en clonant ce fichier de mon dossier d'install vers ...\Users\NameUser\AppData\Roaming\... Ensuite et c'est là le but de cette discussion est de killer ce fichier restant en PF.

    Voilà pourquoi je place un fichier texte en Program Files

    Mais au fait, si je met un fichier manifest ; y aura t'il une tout de même une demande de l'UAC ?

    Merci @+

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Citation Envoyé par Droïde Système7 Voir le message
    Bonsoir,
    Voilà pourquoi je place un fichier texte en Program Files
    OK, je comprends. Moi j'utilise {commonappdata}, c'est pour ça que je n'ai pas ce problème. Je pense que c'est mieux que tu travailles plutôt avec le répertoire temporaire dans ton cas parce que dans tout les cas Program Files n'est vraiment pas conçu pour.

    Mais au fait, si je met un fichier manifest ; y aura t'il une tout de même une demande de l'UAC ?
    Oui, c'est même le seul intérêt
    "It's more fun to compute !"

  15. #15
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    OK, je comprends. Moi j'utilise {commonappdata}, c'est pour ça que je n'ai pas ce problème. Je pense que c'est mieux que tu travailles plutôt avec le répertoire temporaire dans ton cas parce que dans tout les cas Program Files n'est vraiment pas conçu pour.
    Oui, oui, tu as raison

    Bon sang, mais c'est bien sûr ! (inspecteur Bourrel )

    Je balance à l'install ce fichier texte en {commonappdata}, ensuite au premier lancement de mon appli, ce dernier est choppé et expédié droit au but

    et

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/03/2010, 18h23
  2. Program Files et Fichiers Communs
    Par vg-matrix dans le forum Windows XP
    Réponses: 1
    Dernier message: 27/08/2008, 15h37
  3. [VB6-Vista] Compatibilité avec Vista, c:\program files\
    Par Tibaldus dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 16/11/2007, 17h24
  4. Retrouver le chemin de "\Program Files\Fichiers communs\"
    Par Cravis dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 28/09/2007, 10h16
  5. Supprimer 'C:\Program Files\PostgreSQL\8.0\data' ?
    Par TheLeadingEdge dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 18/07/2005, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo