Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Program Files sous Vista

12 réponses
Avatar
Kiriasse
Bonjour,
J'ai un problème, comme disait la chanson...
J'ai développé en VB6 une application qui fonctionne bien sous XP et un
utilisateur me demande de l'adapter à Vista, ce que j'essaie de faire bien
que je n'aie pas encore eu le temps d'installer Vista sur mon ordinateur.

Après quelques échanges de courriels et quelques modifications, mon appli a
fini par fonctionner pour l'essentiel sous Vista mais il me reste une
difficulté à résoudre que ceux qui connaissent Vista pourront peut-être
m'aider à comprendre.

MonAppli crée à chaque fermeture un fichier texte que j'appelle Uninstal.log
et qui contient notamment la liste des entrées créées dans la base de
registres par MonAppli pendant son fonctionnement. La désinstallation
complète de MonAppli est assurée par un petit programme Uninstal.exe (que
j'ai développé avec PureBasic afin qu'il n'ait pas besoin de runtime). Cette
désinstallation se déroule en deux étapes. L'une fait appel à la procédure
classique de Windows (Ajout/suppression de programmes) et lit le fichier
ST6UNST.LOG. L'autre que j'ai écrite en PB lit le fichier Uninstal.log.

Quand on demande à MonAppli (sur l'ordinateur de l'utilisateur) d'afficher
dans un MsgBox le répertoire de l'application, il renvoie « E:\Program
Files\MonAppli\ » et un autre MsgBox montre que le fichier Uninstal.log est
bien créé dans ce répertoire « E:\Program Files\MonAppli\ ».

Cependant, au moment de la désinstallation, le programme de désinstallation
ne trouve pas Uninstal.log et la désinstallation ne se fait donc pas
correctement.

L'utilisateur m'apprend que, sous Vista, il n'y a plus 'Program Files' mais
'Programmes'.
Qu'en est-il ? Cela pourrait être une piste pour comprendre ce qui se
passe...
Je nage... Pouvez-vous m'aider ? Merci d'avance.

10 réponses

1 2
Avatar
aski
Bonjour Kiriasse,

L'utilisateur m'apprend que, sous Vista, il n'y a plus 'Program Files' mais
'Programmes'.
Qu'en est-il ? Cela pourrait être une piste pour comprendre ce qui se
passe...
Je nage... Pouvez-vous m'aider ? Merci d'avance.



Rassure-toi "Program Files" existe bien sous Vista.
J'ai codé des programmes sur 2k/Xp qui utilisent une procédure
équivalente et aucun problème.

--
Cordialement
Aski

"Trop de formalisme tue l'information"
http://dechily.org/

AntiSpamEdit (ASE) - XtractOE et XtractWM - K9 en français
http://dechily.org/downloads.htm#ase
http://dechily.org/downloads.htm#xtractoe
http://dechily.org/downloads.htm#xtractoe
http://dechily.org/downloads.htm#k9
Avatar
Jean-marc
Kiriasse wrote:
Bonjour,

L'utilisateur m'apprend que, sous Vista, il n'y a plus 'Program
Files' mais 'Programmes'.
Qu'en est-il ? Cela pourrait être une piste pour comprendre ce qui se
passe...
Je nage... Pouvez-vous m'aider ? Merci d'avance.



Hello,

Une solution pour connaitre de façon fiable et système indépendante
l'emplacement des répertoires spéciaux est d'utiliser une fonction
de l'API Windows : SHGetSpecialFolderLocation.

Un article de la FAQ est consacré à cette fonction :
http://faq.vb.free.fr/index.php?question`

Je ne sais aps si cela te sera utile, mais sait on jamais.

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Jacques93
Bonjour a tous,
Kiriasse a écrit :
Bonjour,
J'ai un problème, comme disait la chanson...
J'ai développé en VB6 une application qui fonctionne bien sous XP et un
utilisateur me demande de l'adapter à Vista, ce que j'essaie de faire bien
que je n'aie pas encore eu le temps d'installer Vista sur mon ordinateur.

Après quelques échanges de courriels et quelques modifications, mon appli a
fini par fonctionner pour l'essentiel sous Vista mais il me reste une
difficulté à résoudre que ceux qui connaissent Vista pourront peut-être
m'aider à comprendre.

MonAppli crée à chaque fermeture un fichier texte que j'appelle Uninstal.log
et qui contient notamment la liste des entrées créées dans la base de
registres par MonAppli pendant son fonctionnement. La désinstallation
complète de MonAppli est assurée par un petit programme Uninstal.exe (que
j'ai développé avec PureBasic afin qu'il n'ait pas besoin de runtime). Cette
désinstallation se déroule en deux étapes. L'une fait appel à la procédure
classique de Windows (Ajout/suppression de programmes) et lit le fichier
ST6UNST.LOG. L'autre que j'ai écrite en PB lit le fichier Uninstal.log.

Quand on demande à MonAppli (sur l'ordinateur de l'utilisateur) d'afficher
dans un MsgBox le répertoire de l'application, il renvoie « E:Program
FilesMonAppli » et un autre MsgBox montre que le fichier Uninstal.log est
bien créé dans ce répertoire « E:Program FilesMonAppli ».

Cependant, au moment de la désinstallation, le programme de désinstallation
ne trouve pas Uninstal.log et la désinstallation ne se fait donc pas
correctement.

L'utilisateur m'apprend que, sous Vista, il n'y a plus 'Program Files' mais
'Programmes'.
Qu'en est-il ? Cela pourrait être une piste pour comprendre ce qui se
passe...
Je nage... Pouvez-vous m'aider ? Merci d'avance.




Pour compléter les réponses d'aski et de jean-marc, le répertoire
"Program Files" existe bien sous Vista, mais dans l'explorateur, il
s'affiche dans la langue de la session, donc "Programmes" en français,
"Archivos de Programa" en espagnol, etc...

Mais de manière générale, ce n'est pas une bonne idée d'écrire les
données dans le répertoire %ProgramFiles%, ni sous XP, ni sous Vista.
Sous XP, tu peux rencontrer des problèmes de droits, sous Vista c'est
géré complètement différement. Un utilisateur qui n'a pas les droits
administrateur, qui écrit dans %ProgramFiles%, par exemple avec :

Private Sub Command1_Click()
Dim fNum As Integer

fNum = FreeFile
Open Environ("ProgramFiles") & "MonRepMonFic.txt" _
For Output As #fNum
Write #fNum, "toto"
Close #fNum
End Sub

crée en fait le fichier dans :

%UserProfile%AppDataLocalVirtualStoreProgram FilesMonRep

Normalement c'est sensé être transparent pour l'utilisateur, et je ne
sais pas si ton souci vient de là, mais il est préférable d'écrire les
données dans un sous répertoire de %userprofile% ou de %AppData%

Quelques détails :
<http://blogs.developpeur.org/cyril/archive/2006/06/13/Vista-et-ecriture-dans-Program-Files-.aspx>

--
Cordialement,

Jacques.
Avatar
aski
Bonjour Jacques,

Mais de manière générale, ce n'est pas une bonne idée d'écrire les données
dans le répertoire %ProgramFiles%, ni sous XP, ni sous Vista.



Absolument d'accord. Par contre le cas du fichier de désinstallation
n'est-il pas particulier ?

--
Cordialement
Aski

AntiSpamEdit (ASE) - XtractOE et XtractWM - K9 en français
http://dechily.org/downloads.htm
Avatar
Jacques93
Jacques93 a écrit :
Bonjour a tous,



J'ajouterai que par contre il y a un répertoire qui n'existe plus en
tant que tel sous Vista : "Documents and Settings" qui est en fait une
JONCTION (sorte de lien symbolique) vers le répertoire "Users" :

F:>dir /A:L
Le volume dans le lecteur F s'appelle Vista
Le numéro de série du volume est 1E1F-D6F9

Répertoire de F:

02/11/2006 14:00 <JONCTION> Documents and Settings [F:Users]
0 fichier(s) 0 octets
1 Rép(s) 9 067 896 832 octets libres

D'où l'utilité d'utiliser les API's comme l'a indiqué jean-marc, ou les
variables d'environnement.

--
Cordialement,

Jacques.
Avatar
Jacques93
Bonjour Henri,
aski a écrit :
Bonjour Jacques,

Mais de manière générale, ce n'est pas une bonne idée d'écrire les
données dans le répertoire %ProgramFiles%, ni sous XP, ni sous Vista.



Absolument d'accord. Par contre le cas du fichier de désinstallation
n'est-il pas particulier ?




Si, dans la mesure où il a été installé avec des droits Administrateur.
Un compte limité n'est pas sensé faire d'installation. Kiriasse parle de
deux fichiers :

ST6UNST.LOG utilisé par Ajout/Suppression de programmes

et

Uninstal.log écrit à chaque fermeture de l'application

Il me semble avoir compris que c'est sur ce dernier qu'il y a problème

[HS] : As tu reçu mon mail du 29/11 ?

--
Cordialement,

Jacques.
Avatar
Kiriasse
J'avoue ne pas comprendre.

Mon appli écrite en VB6 s'installe avec un programme d'installation qui,
pour sa partie fonctionnelle, est constitué du programme d'installation
Setup.exe généré par l'assistant de VB6.
Il propose donc par défaut à l'utilisateur d'installer l'application dans
Program Files mais l'utilisateur peut librement choisir un autre
répertoire.
Je récupère dans MonAppli le répertoire de l'application (que j'appelle
RepCour) par le code simple suivant :

' === Répertoire de l'application
RepCour = App.Path
If Right$(RepCour, 1) <> "" Then RepCour = RepCour & ""

Je n'ai donc pas à me préoccuper de Program Files.

Mon fichier Uninstal.log est créé dans le répertoire de l'application par du
code prévu dans la procédure Unload de la feuille de démarrage de MonAppli.
Or l'utilisateur sous Vista (qui a choisi d'installer Mon Appli dans le
répertoire proposé par défaut soit « E:Program Files ») ne voit pas
apparaître dans l'Explorateur, dans « E:ProgrammesMonAppli » ce fichier
Uninstal.exe.

Le code de création de ce fichier est du type :
Open RepCour & "Uninstal.log" For Output As #NumFich
Print #NumFile, "Blablabla"
Print #NumFile, "Blablabla"
Close #NumFich

Pourtant un MsgBox prévu avant la fermeture de l'appli et à son redémarrage
(dans Load) m'informe bien que ce fichier Uninstal.log est bien présent.
If FichierPresent(RepCour & "Uninstal.log") = True Then
MsgBox "Uninstal.log est présent dans « " & RepCour & " ».", 64
Else
MsgBox "Uninstal.log est absent dans « " & RepCour & " ».", 64
End If

L'utilisateur m'a transmis une copie d'écran du résultat dans laquelle je
lis : Uninstal.log est présent dans « E:Program FilesMonAppli ».

Alors pourquoi est-ce qu'on ne le voit pas dans l'Explorateur (dans lequel
le répertoire 'Program Files' apparaît sous le nom de 'Programmes') ?

Kiriasse
Répondant à

== "Jacques93"
Pour compléter les réponses d'aski et de jean-marc, le répertoire
"Program Files" existe bien sous Vista, mais dans l'explorateur, il
s'affiche dans la langue de la session, donc "Programmes" en français,
"Archivos de Programa" en espagnol, etc...

Mais de manière générale, ce n'est pas une bonne idée d'écrire les
données dans le répertoire %ProgramFiles%, ni sous XP, ni sous Vista.
Sous XP, tu peux rencontrer des problèmes de droits, sous Vista c'est
géré complètement différement. Un utilisateur qui n'a pas les droits
administrateur, qui écrit dans %ProgramFiles%, par exemple avec :

Private Sub Command1_Click()
Dim fNum As Integer

fNum = FreeFile
Open Environ("ProgramFiles") & "MonRepMonFic.txt" _
For Output As #fNum
Write #fNum, "toto"
Close #fNum
End Sub

crée en fait le fichier dans :

%UserProfile%AppDataLocalVirtualStoreProgram FilesMonRep

Normalement c'est sensé être transparent pour l'utilisateur, et je ne
sais pas si ton souci vient de là, mais il est préférable d'écrire les
données dans un sous répertoire de %userprofile% ou de %AppData%

Quelques détails :
<http://blogs.developpeur.org/cyril/archive/2006/06/13/Vista-et-ecriture-dans-Program-Files-.aspx>

--
Cordialement,

Jacques.
Avatar
Kiriasse
Je me demande si, sous Vista, il ne faut pas prévoir, pour éviter tout
problème, d'installer MonAppli dans un répertoire autre que 'Program Files'.
Le répertoire de MonAppli (mon RepCour) deviendrait par exemple :
C:KiriasseMonAppli
et surtout pas
C:Program FilesMonAppli
Kiriasse
Se complétant

== "Kiriasse"
J'avoue ne pas comprendre.

Mon appli écrite en VB6 s'installe avec un programme d'installation qui,
pour sa partie fonctionnelle, est constitué du programme d'installation
Setup.exe généré par l'assistant de VB6.
Il propose donc par défaut à l'utilisateur d'installer l'application dans
Program Files mais l'utilisateur peut librement choisir un autre
répertoire.
Je récupère dans MonAppli le répertoire de l'application (que j'appelle
RepCour) par le code simple suivant :

' === Répertoire de l'application
RepCour = App.Path
If Right$(RepCour, 1) <> "" Then RepCour = RepCour & ""

Je n'ai donc pas à me préoccuper de Program Files.

Mon fichier Uninstal.log est créé dans le répertoire de l'application par du
code prévu dans la procédure Unload de la feuille de démarrage de MonAppli.
Or l'utilisateur sous Vista (qui a choisi d'installer Mon Appli dans le
répertoire proposé par défaut soit « E:Program Files ») ne voit pas
apparaître dans l'Explorateur, dans « E:ProgrammesMonAppli » ce fichier
Uninstal.exe.

Le code de création de ce fichier est du type :
Open RepCour & "Uninstal.log" For Output As #NumFich
Print #NumFile, "Blablabla"
Print #NumFile, "Blablabla"
Close #NumFich

Pourtant un MsgBox prévu avant la fermeture de l'appli et à son redémarrage
(dans Load) m'informe bien que ce fichier Uninstal.log est bien présent.
If FichierPresent(RepCour & "Uninstal.log") = True Then
MsgBox "Uninstal.log est présent dans « " & RepCour & " ».", 64
Else
MsgBox "Uninstal.log est absent dans « " & RepCour & " ».", 64
End If

L'utilisateur m'a transmis une copie d'écran du résultat dans laquelle je
lis : Uninstal.log est présent dans « E:Program FilesMonAppli ».

Alors pourquoi est-ce qu'on ne le voit pas dans l'Explorateur (dans lequel
le répertoire 'Program Files' apparaît sous le nom de 'Programmes') ?

Kiriasse
Répondant à

== "Jacques93"
Pour compléter les réponses d'aski et de jean-marc, le répertoire
"Program Files" existe bien sous Vista, mais dans l'explorateur, il
s'affiche dans la langue de la session, donc "Programmes" en français,
"Archivos de Programa" en espagnol, etc...

Mais de manière générale, ce n'est pas une bonne idée d'écrire les
données dans le répertoire %ProgramFiles%, ni sous XP, ni sous Vista.
Sous XP, tu peux rencontrer des problèmes de droits, sous Vista c'est
géré complètement différement. Un utilisateur qui n'a pas les droits
administrateur, qui écrit dans %ProgramFiles%, par exemple avec :

Private Sub Command1_Click()
Dim fNum As Integer

fNum = FreeFile
Open Environ("ProgramFiles") & "MonRepMonFic.txt" _
For Output As #fNum
Write #fNum, "toto"
Close #fNum
End Sub

crée en fait le fichier dans :

%UserProfile%AppDataLocalVirtualStoreProgram FilesMonRep

Normalement c'est sensé être transparent pour l'utilisateur, et je ne
sais pas si ton souci vient de là, mais il est préférable d'écrire les
données dans un sous répertoire de %userprofile% ou de %AppData%

Quelques détails :
<http://blogs.developpeur.org/cyril/archive/2006/06/13/Vista-et-ecriture-dans-Program-Files-.aspx>

--
Cordialement,

Jacques.
Avatar
Jacques93
Kiriasse a écrit :
J'avoue ne pas comprendre.

Mon appli écrite en VB6 s'installe avec un programme d'installation qui,
pour sa partie fonctionnelle, est constitué du programme d'installation
Setup.exe généré par l'assistant de VB6.
Il propose donc par défaut à l'utilisateur d'installer l'application dans
Program Files mais l'utilisateur peut librement choisir un autre
répertoire.
Je récupère dans MonAppli le répertoire de l'application (que j'appelle
RepCour) par le code simple suivant :

' === Répertoire de l'application
RepCour = App.Path
If Right$(RepCour, 1) <> "" Then RepCour = RepCour & ""

Je n'ai donc pas à me préoccuper de Program Files.

Mon fichier Uninstal.log est créé dans le répertoire de l'application par du
code prévu dans la procédure Unload de la feuille de démarrage de MonAppli.
Or l'utilisateur sous Vista (qui a choisi d'installer Mon Appli dans le
répertoire proposé par défaut soit « E:Program Files ») ne voit pas
apparaître dans l'Explorateur, dans « E:ProgrammesMonAppli » ce fichier
Uninstal.exe.

Le code de création de ce fichier est du type :
Open RepCour & "Uninstal.log" For Output As #NumFich
Print #NumFile, "Blablabla"
Print #NumFile, "Blablabla"
Close #NumFich

Pourtant un MsgBox prévu avant la fermeture de l'appli et à son redémarrage
(dans Load) m'informe bien que ce fichier Uninstal.log est bien présent.
If FichierPresent(RepCour & "Uninstal.log") = True Then
MsgBox "Uninstal.log est présent dans « " & RepCour & " ».", 64
Else
MsgBox "Uninstal.log est absent dans « " & RepCour & " ».", 64
End If

L'utilisateur m'a transmis une copie d'écran du résultat dans laquelle je
lis : Uninstal.log est présent dans « E:Program FilesMonAppli ».

Alors pourquoi est-ce qu'on ne le voit pas dans l'Explorateur (dans lequel
le répertoire 'Program Files' apparaît sous le nom de 'Programmes') ?




C'est ce que j'explique dans ma réponse, je crois.
Regardes dans

E:UsersNomDuProfilAppDataLocalVirtualStoreProgram FilesMonAppli

tu devrais l'y trouver.

Tu peux aussi faire Rechercher, via l'explorateur

--
Cordialement,

Jacques.
Avatar
Jacques93
Kiriasse a écrit :
Je me demande si, sous Vista, il ne faut pas prévoir, pour éviter tout
problème, d'installer MonAppli dans un répertoire autre que 'Program Files'.
Le répertoire de MonAppli (mon RepCour) deviendrait par exemple :
C:KiriasseMonAppli
et surtout pas
C:Program FilesMonAppli
Kiriasse
Se complétant




Je ne penses pas. Si tous les éditeurs faisaient comme ça ce serait un
joyeux foutoir dans la racine du disque. Le truc à respecter c'est de
séparer les programmes des données. En principe les programmes vont dans

%ProgramFiles%NomDeLediteurNomDeLapplication

et suivant leurs type (profil itinérant, local, commun), les données
vont dans les répertoires adéquats. Il est préférable d'utiliser la
méthode indiquée par jean-marc (SHGetSpecialFolderLocation), car
certains répertoires n'ont pas de variables d'environnement associées,
ou pas totalement, et peuvent varier entre XP et Vista.

Mais bon, chacun est libre, quitte à avoir de mauvaise surprise ...

Voici ce que j'obtiens sur un Dual Boot (XP sur C:, Vista sur F:)

Programmes :
----------
Special Folder :
CSIDL_PROGRAM_FILES

Variable d'environnement :
%PROGRAMFILES%

Valeur :
XP :
C:Program Files
Vista :
F:Program Files


Données d'un compte itinérant :
-----------------------------

Special Folder :
CSIDL_APPDATA

XP :
Variable d'environnement :
%APPDATA%
Valeur :
C:Documents and SettingsNomDuCompteApplication Data

Vista :
Variable d'environnement :
%APPDATA%
Valeur :
F:UsersNomDuCompteAppDataRoaming


Données d'un compte local :
-------------------------

Special Folder :
CSIDL_LOCAL_APPDATA

XP :
Variable d'environnement :
%USERPROFILE%Local SettingsApplication Data
Valeur :
C:Documents and SettingsNomDuCompteLocal SettingsApplication Data

Vista :
Variable d'environnement :
%USERPROFILE%AppDataLocal
Valeur :
F:UsersNomDuCompteAppDataLocal


Données communes à tous les comptes :
-----------------------------------

Special Folder :
CSIDL_COMMON_APPDATA

XP :
Variable d'environnement :
%ALLUSERSPROFILE%Application Data
Valeur :
C:Documents and SettingsAll UsersApplication Data

Vista:
Variable d'environnement :
%ALLUSERSPROFILE%
Valeur :
F:ProgramData


--
Cordialement,

Jacques.
1 2