Création et encodage UTF8 sans nomenclature en VB.NET
Résolu/Fermé
A voir également:
- Utf-8 avec nomenclature
- Clé windows 8 - Guide
- Mixcraft 8 - Télécharger - Création musicale
- Internet explorer 8 - Télécharger - Navigateurs
- Sketchup 8 - Télécharger - 3D
- Driver booster 8 - Télécharger - Pilotes & Matériel
6 réponses
J'ai trouvé la solution pour avoir un encodage UTF8 no BOM. Par contre j'ai un autre soucis. Lorsque je lance mon batch depuis mon code, j'ai un accès refusé sur la modification de ma valeur de registre. Par contre si je relance le batch à la main depuis l'explorateur windows, il marche....
Voilà mon code pour générer mon .bat avec l'encodage sans BOM :
Pour exécuter mon .bat je fais ça dans une sub :
Je suppose qu'il y a un problème de droit mais là je n'ai aucune idée d'où ça vient. Et je suppose qu'il y a aussi plusieurs manières d'exécuter un fichier externe...
Est-ce que vous savez pourquoi Process.Start ne passe pas ?
Merci
(snif)
Voilà mon code pour générer mon .bat avec l'encodage sans BOM :
Sub Creation_bat() If File.Exists(Chemin_bat) Then 'test si le fichier existe File.Delete(Chemin_bat) Else 'le fichier n'existe pas End If ' Create the file. 'Dim file_bat As StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(Chemin_bat, True) Dim utf8WithoutBom As New UTF8Encoding(False) Using writer As StreamWriter = New StreamWriter(Chemin_bat, False, utf8WithoutBom) writer.WriteLine("REG ADD " & """" & "HKEY_LOCAL_MACHINE\SOFTWARE\Mitutoyo\QVPMgr\3.1\Folder" & """" & " /v " & """" & "LatestFolder1" & """" & " /d " & """" & "qwerty" & """" & " /f") writer.WriteLine("TIMEOUT /T 8 /NOBREAK") writer.Close() End Using End Sub
Pour exécuter mon .bat je fais ça dans une sub :
Creation_bat() System.Diagnostics.Process.Start(Chemin_bat)
Je suppose qu'il y a un problème de droit mais là je n'ai aucune idée d'où ça vient. Et je suppose qu'il y a aussi plusieurs manières d'exécuter un fichier externe...
Est-ce que vous savez pourquoi Process.Start ne passe pas ?
Merci
(snif)
Whismeril
Messages postés
18797
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
3 décembre 2023
916
6 janv. 2021 à 20:52
6 janv. 2021 à 20:52
Bonsoir
peut-être la solution montrée en C# ici https://stackoverflow.com/questions/5519328/executing-batch-file-in-c-sharp
et pour convertir en VB
https://lite.qwant.com/?q=c%23+to+vb&t=web
peut-être la solution montrée en C# ici https://stackoverflow.com/questions/5519328/executing-batch-file-in-c-sharp
et pour convertir en VB
https://lite.qwant.com/?q=c%23+to+vb&t=web
Bonjour,
Merci pour l'info.
Je garde dans un coin, ça permet d'avoir un process start avec des options.
Par contre j'ai pu tester ce code avec les commandes que je veux exécuter et je vois que certaines commandes ne passent pas. En fait je veux modifier une valeur de la base de registre et cela ne marche pas. Si j'exécute la commande depuis mon exe, j'ai un accès refusé, si je le fais à la main ça passe.
Idem si cette commande est dans un .bat. Si je lance le bat depuis mon exe ça ne passe pas ; si je lance le bat à la main ça marche.....
Du coup mon code fonctionne très bien, c'est juste qu'il doit y avoir une restriction sur l'exe de ma solution (??).
D'ailleurs j'ai trouvé la syntaxe pour modifier une valeur d'une clé de registre en VB.NET directement, et même avec ça il n'y a pas de modification :
Je ne vois pas sur quoi je dois agir pour pouvoir modifier cette foutue valeur ><
Merci pour l'info.
Je garde dans un coin, ça permet d'avoir un process start avec des options.
Par contre j'ai pu tester ce code avec les commandes que je veux exécuter et je vois que certaines commandes ne passent pas. En fait je veux modifier une valeur de la base de registre et cela ne marche pas. Si j'exécute la commande depuis mon exe, j'ai un accès refusé, si je le fais à la main ça passe.
Idem si cette commande est dans un .bat. Si je lance le bat depuis mon exe ça ne passe pas ; si je lance le bat à la main ça marche.....
Du coup mon code fonctionne très bien, c'est juste qu'il doit y avoir une restriction sur l'exe de ma solution (??).
D'ailleurs j'ai trouvé la syntaxe pour modifier une valeur d'une clé de registre en VB.NET directement, et même avec ça il n'y a pas de modification :
Imports Microsoft.Win32
Dim regKey As RegistryKey
regKey=Registry.LocalMachine.OpenSubKey("HKEY_LOCAL_MACHINE\SOFTWARE\Mitutoyo\QVPMgr\3.1\Folder", True)
regKey.SetValue("LatestFolder1", "test")
regKey.Close()
Je ne vois pas sur quoi je dois agir pour pouvoir modifier cette foutue valeur ><
Whismeril
Messages postés
18797
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
3 décembre 2023
916
7 janv. 2021 à 12:34
7 janv. 2021 à 12:34
Est ce que tu es en session administrateur et execute tu le logiciel « en tant qu’administrateur » ?
Effectivement je pense qu'il y a des problèmes de droit.
De base je suis admin de mon poste (et encore, ce que je code est au final pour des clients avec des postes utilisateurs classiques.... ><, mais admettons que l'utilisateur est admin du poste)
Aussi, de base, dans les propriétés de lancement de mon projet dans Visual Studio, "Préférer 32 bits" était cocher. Maintenant mon bat de modification de valeur de clé de registre fonctionne en partie.
Donc :
- Dans visual studio exécuté normalement ou en admin, ça marche avec le debug mode
- Sur ma release ou dans visual studio avec le mode release ça ne marche plus pour raison de sécurité et donc de droit.
Je suis allé voir ma clé de registre pour mettre le contrôle totale de partout, ça ne change rien.
Mon exception c'est bien : System.Security.SecurityException : 'Accès au registre demandé non autorisé.'
Si j'exécute ma release .exe en tant qu'administrateur, mon appli fonctionne mais la valeur de ma clé de registre ne change plus....
J'ai l'impression que c'est mort. Pourtant la valeur de cette clé que je touche est également modifié par un des modules de notre soft.... Je veux faire la même chose que lui mais via mon application externe.
Edit : il y a 2 types de lancement "release" dans visual studio, une active et l'autre non, chacune a son réglage 64 ou 32 bits... Tout à l'air de marcher maintenant. Il me restera qu'à voir le comportement sur site client avec des sessions utilisateurs classiques.
De base je suis admin de mon poste (et encore, ce que je code est au final pour des clients avec des postes utilisateurs classiques.... ><, mais admettons que l'utilisateur est admin du poste)
Aussi, de base, dans les propriétés de lancement de mon projet dans Visual Studio, "Préférer 32 bits" était cocher. Maintenant mon bat de modification de valeur de clé de registre fonctionne en partie.
Donc :
- Dans visual studio exécuté normalement ou en admin, ça marche avec le debug mode
- Sur ma release ou dans visual studio avec le mode release ça ne marche plus pour raison de sécurité et donc de droit.
Je suis allé voir ma clé de registre pour mettre le contrôle totale de partout, ça ne change rien.
Mon exception c'est bien : System.Security.SecurityException : 'Accès au registre demandé non autorisé.'
Si j'exécute ma release .exe en tant qu'administrateur, mon appli fonctionne mais la valeur de ma clé de registre ne change plus....
J'ai l'impression que c'est mort. Pourtant la valeur de cette clé que je touche est également modifié par un des modules de notre soft.... Je veux faire la même chose que lui mais via mon application externe.
Edit : il y a 2 types de lancement "release" dans visual studio, une active et l'autre non, chacune a son réglage 64 ou 32 bits... Tout à l'air de marcher maintenant. Il me restera qu'à voir le comportement sur site client avec des sessions utilisateurs classiques.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
cs_Le Pivert
Messages postés
7902
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 novembre 2023
727
8 janv. 2021 à 10:12
8 janv. 2021 à 10:12
Bonjour à tous les 2,
j'ai été confronté à ce problème sur ce programme:
https://codes-sources.commentcamarche.net/source/view/102722/1561662
j'ai trouvé la solution ici:
https://openclassrooms.com/forum/sujet/creer-une-cle-registre-dans-hkey-local-machine
Vois si cela fonctionne pour toi!
j'ai été confronté à ce problème sur ce programme:
https://codes-sources.commentcamarche.net/source/view/102722/1561662
j'ai trouvé la solution ici:
https://openclassrooms.com/forum/sujet/creer-une-cle-registre-dans-hkey-local-machine
Vois si cela fonctionne pour toi!
Ok, je vois à peu près commet ça fonctionne. Je ne savais pas qu'il y avait un distinguo 32 et 64 bits de la base de registre sur un OS 64 bits.
Dans ma tête le 32 bits marchait "parce que c'est normal" sur une architecture 64 bits.
Pas encore tout compris au lien mais je saisis l'idée.
Pour l'instant mon programme est amené à fonctionner que sur du 64 bits, donc maintenant que j'ai tout forcé pour ça, ça marche. Mais j'essaierai à l'avenir de le généraliser pour les 2 architectures.
Merci.
Dans ma tête le 32 bits marchait "parce que c'est normal" sur une architecture 64 bits.
Pas encore tout compris au lien mais je saisis l'idée.
Pour l'instant mon programme est amené à fonctionner que sur du 64 bits, donc maintenant que j'ai tout forcé pour ça, ça marche. Mais j'essaierai à l'avenir de le généraliser pour les 2 architectures.
Merci.