Plantage incessant avec le fichier config

Messages postés
123
Date d'inscription
jeudi 9 mars 2017
Statut
Membre
Dernière intervention
28 octobre 2019
- - Dernière réponse : jojorealisateur
Messages postés
123
Date d'inscription
jeudi 9 mars 2017
Statut
Membre
Dernière intervention
28 octobre 2019
- 27 oct. 2019 à 22:18
Bonjour,

J'ai créé un logiciel en vb.net qui utilise un fichier config avec lequel j'ai un bug incessant.
Lorsque j'ai créé mon logiciel, aucun problème, chaque fois que je le testais, il fonctionnait parfaitement.
Le problème, c'est quand j'ai essayé de l'installer... En effet, il est censé se trouver dans le dossier Programs Files après installation. J'ai créé un script iss et je l'ai lancé. Après avoir démarré mon logiciel fraîchement installé, j'ai reçu ce message :
************** Texte de l'exception **************
System.Configuration.ConfigurationErrorsException: Une erreur s'est produite lors du chargement d'un fichier de configuration : L'accès au chemin d'accès 'C:\Program Files (x86)\ScreenCapture\vtrx1acc.tmp' est refusé. (C:\Program Files (x86)\ScreenCapture\ScreenCapture.exe.Config) ---> System.UnauthorizedAccessException: L'accès au chemin d'accès 'C:\Program Files (x86)\ScreenCapture\vtrx1acc.tmp' est refusé.
à System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
à System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
à System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)
à System.CodeDom.Compiler.TempFileCollection.EnsureTempNameCreated()
à System.CodeDom.Compiler.TempFileCollection.AddExtension(String fileExtension, Boolean keepFile)
à System.Configuration.Internal.WriteFileContext..ctor(String filename, String templateFilename)
à System.Configuration.Internal.InternalConfigHost.StaticOpenStreamForWrite(String streamName, String templateStreamName, Object& writeContext, Boolean assertPermissions)
à System.Configuration.Internal.InternalConfigHost.System.Configuration.Internal.IInternalConfigHost.OpenStreamForWrite(String streamName, String templateStreamName, Object& writeContext, Boolean assertPermissions)
à System.Configuration.Internal.InternalConfigHost.System.Configuration.Internal.IInternalConfigHost.OpenStreamForWrite(String streamName, String templateStreamName, Object& writeContext)
à System.Configuration.ClientConfigurationHost.OpenStreamForWrite(String streamName, String templateStreamName, Object& writeContext)
à System.Configuration.UpdateConfigHost.OpenStreamForWrite(String streamName, String templateStreamName, Object& writeContext)
à System.Configuration.MgmtConfigurationRecord.SaveAs(String filename, ConfigurationSaveMode saveMode, Boolean forceUpdateAll)
--- Fin de la trace de la pile d'exception interne ---
à System.Configuration.MgmtConfigurationRecord.SaveAs(String filename, ConfigurationSaveMode saveMode, Boolean forceUpdateAll)
à System.Configuration.Configuration.SaveAsImpl(String filename, ConfigurationSaveMode saveMode, Boolean forceSaveAll)
à System.Configuration.Configuration.Save(ConfigurationSaveMode saveMode)
à ScreenCapture.Form4.Button2_Click(Object sender, EventArgs e)
à System.Windows.Forms.Control.OnClick(EventArgs e)
à System.Windows.Forms.Button.OnClick(EventArgs e)
à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
à System.Windows.Forms.Control.WndProc(Message& m)
à System.Windows.Forms.ButtonBase.WndProc(Message& m)
à System.Windows.Forms.Button.WndProc(Message& m)
à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
à System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
                            • Assemblys chargés **************mscorlib Version de l'assembly : 4.0.0.0 Version Win32 : 4.8.4042.0 built by: NET48REL1LAST_C CodeBase : file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll----------------------------------------ScreenCapture Version de l'assembly : 1.0.0.0 Version Win32 : 1.0.0.0 CodeBase : file:///C:/Program%20Files%20(x86)/ScreenCapture/ScreenCapture.exe----------------------------------------Microsoft.VisualBasic Version de l'assembly : 10.0.0.0 Version Win32 : 14.8.3761.0 built by: NET48REL1 CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll----------------------------------------System Version de l'assembly : 4.0.0.0 Version Win32 : 4.8.4001.0 built by: NET48REL1LAST_C CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll----------------------------------------System.Core Version de l'assembly : 4.0.0.0 Version Win32 : 4.8.4042.0 built by: NET48REL1LAST_C CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll----------------------------------------System.Windows.Forms Version de l'assembly : 4.0.0.0 Version Win32 : 4.8.4042.0 built by: NET48REL1LAST_C CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll----------------------------------------System.Drawing Version de l'assembly : 4.0.0.0 Version Win32 : 4.8.3761.0 built by: NET48REL1 CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll----------------------------------------System.Configuration Version de l'assembly : 4.0.0.0 Version Win32 : 4.8.3761.0 built by: NET48REL1 CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll----------------------------------------System.Xml Version de l'assembly : 4.0.0.0 Version Win32 : 4.8.3761.0 built by: NET48REL1 CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll----------------------------------------System.Runtime.Remoting Version de l'assembly : 4.0.0.0 Version Win32 : 4.8.3761.0 built by: NET48REL1 CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll----------------------------------------mscorlib.resources Version de l'assembly : 4.0.0.0 Version Win32 : 4.8.3761.0 built by: NET48REL1 CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_fr_b77a5c561934e089/mscorlib.resources.dll----------------------------------------System.Configuration.resources Version de l'assembly : 4.0.0.0 Version Win32 : 4.8.3761.0 built by: NET48REL1 CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration.resources/v4.0_4.0.0.0_fr_b03f5f7f11d50a3a/System.Configuration.resources.dll----------------------------------------System.Windows.Forms.resources Version de l'assembly : 4.0.0.0 Version Win32 : 4.8.3761.0 built by: NET48REL1 CodeBase : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_fr_b77a5c561934e089/System.Windows.Forms.resources.dll----------------------------------------


Je pense que c'est un problème d'autorisation, parce que quand je le lance en mode admin, je ne constate aucun problème apparent.
Comment puis-je corriger ce problème ?

Merci !

Jojorealisateur
Afficher la suite 

5 réponses

Messages postés
13948
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 novembre 2019
417
0
Merci
Bonsoir

c'est vtrx1acc.tmp ton fichier de configuration?
Commenter la réponse de Whismeril
Messages postés
14590
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 novembre 2019
183
0
Merci
Par défaut, le dossier Program files est en lecture seule pour les utilisateurs.
jojorealisateur
Messages postés
123
Date d'inscription
jeudi 9 mars 2017
Statut
Membre
Dernière intervention
28 octobre 2019
2 -
Bonsoir,

Par rapport à la lecture seule, j'étais au courant... Mais que puis-je faire alors ? Le vb.net ne prévoit-il pas cette éventualité ?
@Whismeril, mon fichier config est nomdulogiciel.exe.config. Il est au format XML.

Merci !

Jojorealisateur
Commenter la réponse de NHenry
Messages postés
13948
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 novembre 2019
417
0
Merci
Bonsoir
<block>@Whismeril, mon fichier config est nomdulogiciel.exe.config. Il est au format XML. </gras>
Ok, c'est pas un fichier perso.
Ton message d'erreur dit que c'est vtrx1acc.tmp qui est inaccessible
jojorealisateur
Messages postés
123
Date d'inscription
jeudi 9 mars 2017
Statut
Membre
Dernière intervention
28 octobre 2019
2 -
Oui, excusez-moi... Je n'avais pas compris... Oui, effectivement, c'est écrit dans le message d'erreur :
System.Configuration.ConfigurationErrorsException: Une erreur s'est produite lors du chargement d'un fichier de configuration : L'accès au chemin d'accès 'C:\Program Files (x86)\ScreenCapture\vtrx1acc.tmp' est refusé.
Commenter la réponse de Whismeril
Messages postés
13948
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 novembre 2019
417
0
Merci
Donc, il te faut déterminer à quoi sert ce fichier et comment le rendre accessible.
Comme l'a dit NHenry, ce dossier est inaccessible à l'utilisateur
jojorealisateur
Messages postés
123
Date d'inscription
jeudi 9 mars 2017
Statut
Membre
Dernière intervention
28 octobre 2019
2 -
Le fait qu'il est inaccessible en dehors du mode admin, je savais... Mais je pensais quand même que les fichiers config étaient des exceptions (j'ai vraiment été idiot de le penser d'ailleurs).
N'y aurait-il pas un moyen de, par exemple, déplacer ce fichier de configuration vers AppData et de l'utiliser là ?
Commenter la réponse de Whismeril
Messages postés
13948
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 novembre 2019
417
0
Merci
Tu as confirmé que vtrx1acc.tmp n'est pas ton fichier de config, c'est ce fichier qui est inaccessible.
Donc c'est ce fichier qu'il faut traiter.
Trouver à quoi il sert, et pourquoi il est appelé lors de la lecture de ton fichier de config.

Ou alors, tu peux essayer de déplacer des datas vers AppData, mais pas nomdulogiciel.exe.config, à ma connaissance du moins.
Selon ce que j'en sais ce fichier est obligatoirement au même endroit que l'exe.

Rien ne t'empêche de copier le contenu actuel de ce fichier de le mettre un un "vrai" fichier xml quelque part dans AppData et d'aller lire ce fichier de config "personnalisé" comme un fichier xml.
Mais il va te falloir remplacer tout le code qui utilise le fichier de config par défaut. Et le remplacer par les données issues de ton nouveau fichier.

jojorealisateur
Messages postés
123
Date d'inscription
jeudi 9 mars 2017
Statut
Membre
Dernière intervention
28 octobre 2019
2 -
Je viens de re-tenter une exécution, mais le fichier vtrx1acc.tmp a changé de nom... C'est à mon avis un simple fichier temporaire, donc le nom est complètement aléatoire.

Je suis moins chaud pour un recodage complet avec un bête fichier XML, s'il y a un autre moyen...
Whismeril
Messages postés
13948
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 novembre 2019
417 -
Comme tu l'as dit toi même, le fichier de config est un
un bête fichier XML
avec l'extension config, tu peux faire pareil.

Mais je pense vraiment, qu'il faudrait que tu cherches en quoi ce fichier temporaire est nécessaire.

Une autre option est d'installer le logiciel ailleurs.

J'en connais qui sont quasiment à 100% dans AppData, dans programme files, il n'y a qu'un loader
jojorealisateur
Messages postés
123
Date d'inscription
jeudi 9 mars 2017
Statut
Membre
Dernière intervention
28 octobre 2019
2 -
J'ai essayé de le mettre dans Appdata, ça fonctionne... Donc c'est ce que je vais faire... Merci beaucoup pour votre aide !

Jojorealisateur
Commenter la réponse de Whismeril