none
Liste des programmes installés RRS feed

  • Question

  • Bonjour à tous

    Je me fais un programme en Basic dans lequel, je voudrais récupérer la liste des programmes installé sur le PC (liste qu'il y a dans "Programmes et fonctionnalité") sans les mise à jour Windows.

    Je sais qu'on peut les trouvé avec la clé de registre : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall mais il me semble qu'ils n'y sont pas tous et je sais pas comment récupérer les "DisplauName" des différents soft.

    J'ai essayé avec WMI Code Creator et la propriété "NAME" mais la liste n'est pas complète et il y a beaucoup plus d'info que nécessaire :

    Imports System
    Imports System.Management
    Imports System.Windows.Forms
    
    Namespace WMISample
    
        Public Class MyWMIQuery
    
            Public Overloads Shared Function Main() As Integer
    
                Try
                    Dim searcher As New ManagementObjectSearcher( _
                        "root\CIMV2", _
                        "SELECT * FROM Win32_Product") 
    
                    For Each queryObj As ManagementObject in searcher.Get()
    
                        Console.WriteLine("-----------------------------------")
                        Console.WriteLine("Win32_Product instance")
                        Console.WriteLine("-----------------------------------")
                        Console.WriteLine("Name: {0}", queryObj("Name"))
                    Next
                Catch err As ManagementException
                    MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)
                End Try
            End Function
        End Class
    End Namespace


    Existe t-il une autre solution qui permet d'avoir toute la liste (ainsi que les version si possible)

    Merci d'avance pour votre aide.

    Bonne journée
    A+

    mercredi 8 janvier 2014 18:34

Toutes les réponses

  • Bonjour,

    Il y a 2 ans, j'avais le besoin que vous et j'ai utiliser une assembly de Microsoft présent dans le projet WiX (permettant de faire des programmes d'installation) : Microsoft.Deployment.WindowsInstaller.dll

    Elle n'est pas documenté, mais je me rappel qu'elle est simple d'utilisation et utilise l'API Windows Installer de Windows ce qui permet de récupérer des informations fiables sur ce qui est réellement installé.

    Vous pouvez la récupérer dans le répertoire d'installation du projet WiX : http://wix.codeplex.com/ 

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    mercredi 8 janvier 2014 23:26
    Modérateur
  • Merci beaucoup Gilles

    J'ai téléchargé et installer Wix.

    Je sais pas c'était se qu'il fallait faire mais j'ai ajouté les références Microsoft.Deployment.WindowsInstaller.

    Mais après, je dais quoi ??

    jeudi 9 janvier 2014 18:56
  • Sinon, j'ai testé :

    Dim Key As RegistryKey
            Dim Reader As RegistryKey
            Dim Y As String
    
            Key = Registry.LocalMachine.OpenSubKey("Softwa­re\Microsoft\Windows\CurrentVersion\Unin­stall", False)
    
            For Each X In Key.GetSubKeyNames
                Reader = Registry.LocalMachine.OpenSubKey("Softwa­re\Microsoft\Windows\CurrentVersion\Unin­stall\" & X, False)
                If Reader.GetValueNames().Contains("Display­Name") Then
                    Y = Reader.GetValue("DisplayName")
                    If Not ListBox1.Items.Contains(Y) Then ListBox1.Items.Add(Y)
                End If
            Next


    Mais j'ai l'erreur : 

    Une exception non gérée du type 'System.NullReferenceException' s'est produite dans ComputerInformationReport.exe

    Informations supplémentaires : La référence d'objet n'est pas définie à une instance d'un objet.

    A+

    jeudi 9 janvier 2014 19:44
  • Bonjour,

    Une exemple très complet ici :

    http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=4424&lngWId=10


    Jacques
    Si la réponse vous satisfait, n'oubliez pas de la proposer comme réponse. Merci

    vendredi 10 janvier 2014 02:28
  • Bonsoir

    Merci Paraglider mais étant débutant, cet exemple est trop complet pour moi mais je vais quand même voir les codes.

     


    • Modifié FCL31 lundi 13 janvier 2014 00:13
    lundi 13 janvier 2014 00:13
  • Bonjour,

    Ajouter dans les références "System.Management"

    Dans un formulaire ajouter une "ListBox" appelée ListBox1 et le code ci-dessous.

    Être patient cela prend un peu de temps. C'est pourquoi j'ai mis un message .. "C'est fini !

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load LoadSoftwareList() End Sub Private Sub LoadSoftwareList() ListBox1.Items.Clear() Dim moReturn As Management.ManagementObjectCollection Dim moSearch As Management.ManagementObjectSearcher Dim mo As Management.ManagementObject moSearch = New Management.ManagementObjectSearcher("Select * from Win32_Product") moReturn = moSearch.Get For Each mo In moReturn

    ' Affichage dans la fenêtre exécution Debug.Print(mo("Name").ToString)

    ' Affichage dans la listbox ListBox1.Items.Add(mo("Name").ToString) Next Msgbox "C'est fini !" End Sub



    Jacques
    Si la réponse vous satisfait, n'oubliez pas de la proposer comme réponse. Merci


    lundi 13 janvier 2014 02:49
  • Merci pour ton code, mais j'ai toujours le même problème : le résultat ne correspond pas à la liste des programmes du panneau de configuration :

    Voici une capture d'écran de la liste de mes programmes :

    Voici le résultat que j'obtiens avec mon code :

    Name: Microsoft Help Viewer 1.0 Language Pack - FRA
    Name: Microsoft Office File Validation Add-In
    Name: Microsoft Visual Studio Ultimate 2012 XAML UI Designer Core
    Name: Visual Studio 2012 x64 Redistributables
    Name: Microsoft Visual C++ 2012 x64 Debug Runtime - 11.0.50727
    Name: MSXML 4.0 SP3 Parser (KB2758694)
    Name: Module linguistique de Microsoft Visual Studio Team Foundation Server 2012 Team Explorer - FRA
    Name: Zune Language Pack (NLD)
    Name: Microsoft SQL Server Compact 3.5 SP2 FRA
    Name: Microsoft SQL Server Compact 4.0 SP1 x64 FRA
    Name: Microsoft Games for Windows - LIVE Redistributable
    Name: Microsoft Visual C++ 2008 Redistributable - x64 9.0.21022
    Name: Microsoft SQL Server Data Tools Build Utilities - FRA (11.1.20828.01)
    Name: Windows App Certification Kit x64
    Name: Zune Language Pack (PTG)
    Name: Zune Language Pack (PLK)
    Name: Visual Studio Extensions for Windows Library for JavaScript
    Name: Zune Language Pack (FRA)
    Name: Oracle VM VirtualBox 4.2.6
    Name: LogMeIn
    Name: Microsoft Visual C++ 2010  x86 Redistributable - 10.0.40219
    Name: AVG 2014
    Name: Microsoft NuGet - Visual Studio Express 2012 for Windows Desktop
    Name: Microsoft .NET Framework 4.5 SDK - Module linguistique FRA
    Name: Zune Language Pack (KOR)
    Name: MSXML 4.0 SP3 Parser
    Name: Composants requis pour SSDT 
    Name: Microsoft Visual Studio 2012 Tools pour SQL Server Compact 4.0 SP1 FRA
    Name: Microsoft Visual C++ 2012 x86 Minimum Runtime - 11.0.50727
    Name: Microsoft Visual Studio Team Foundation Server 2012 Object Model
    Name: WiX Toolset v3.8 Core
    Name: Microsoft Visual C++ 2012 Compilers
    Name: Service de langage T-SQL Microsoft SQL Server 2012 
    Name: Microsoft SQL Server 2012 Transact-SQL ScriptDom 
    Name: Microsoft Visual Studio 2012 Express Prerequisites x64 - FRA
    Name: Microsoft Visual C++ 2012 x86 Debug Runtime - 11.0.50727
    Name: Windows Software Development Kit DirectX x64 Remote
    Name: Microsoft Visual C++ 2012 x86 Additional Runtime - 11.0.50727
    Name: Microsoft Visual C++ 2005 Redistributable
    Name: Microsoft Visual Studio Team Foundation Server 2012 Team Explorer
    Name: Microsoft .NET Framework 4.5 Multi-Targeting Pack
    Name: Blend for Visual Studio 2012
    Name: Entity Framework Designer pour Visual Studio 2012 - FRA
    Name: Microsoft Visual Studio Express 2012 pour Windows 8 - FRA
    Name: Microsoft SQL Server 2012 Native Client 
    Name: Zune Language Pack (FIN)
    Name: WBFS Manager 4.0
    Name: Microsoft Visual C++ 2012 32bit Compilers - FRA Resources
    Name: Microsoft SQL Server 2012 Management Objects (x64)
    Name: Microsoft Visual C++ 2012 Compilers - FRA Resources
    Name: Microsoft Visual C++ 2012 x86-x64 Compilers
    Name: Windows Runtime Intellisense Content - fr-fr
    Name: Java 7 Update 45
    Name: WiX Toolset v3.8 X64
    Name: Microsoft Visual Studio Ultimate 2012 XAML UI Designer fra Resources
    Name: Types CLR du système Microsoft pour SQL Server 2012
    Name: Aeria Ignite
    Name: Windows Software Development Kit for Windows Store Apps DirectX x86 Remote
    Name: Zune Language Pack (RUS)
    Name: Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.6161
    Name: Zune Language Pack (HUN)
    Name: Module linguistique du modèle objet Microsoft Visual Studio Team Foundation Server 2012 - FRA
    Name: Visual Studio 2010 x64 Redistributables
    Name: Microsoft Visual Studio Express 2012 for Windows 8
    Name: Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.6161
    Name: Microsoft Visual Studio Express 2012 for Windows Desktop
    Name: Module linguistique de la visionneuse d'aide Microsoft 2.0 - FRA
    Name: BlueStacks Notification Center
    Name: Microsoft System CLR Types pour SQL Server 2012 (x64)
    Name: Outils Microsoft Visual Studio 2010 ADO.NET Entity Framework
    Name: Microsoft Visual C++ 2012 Core Libraries
    Name: Zune Language Pack (NOR)
    Name: Windows Software Development Kit DirectX x86 Remote
    Name: Utilitaires ligne de comm. Microsoft SQL Server 2012 
    Name: Windows App Certification Kit Native Components
    Name: Microsoft Visual Basic 2010 Express - FRA
    Name: Microsoft SQL Server 2012 Express LocalDB 
    Name: Zune Language Pack (DAN)
    Name: Ma-Config.com (64 bits)
    Name: Zune Language Pack (PTB)
    Name: Microsoft .NET Framework 4 Multi-Targeting Pack
    Name: Zune Language Pack (CHT)
    Name: Medal of Honor (TM)
    Name: OpenOffice 4.0.1
    Name: Microsoft SQL Server 2012 Transact-SQL Compiler Service 
    Name: Zune Language Pack (CHS)
    Name: Ressources de Microsoft Visual Studio 2012 Shell (minimum)
    Name: Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729
    Name: Microsoft Visual Studio Express 2012 pour Windows Desktop - FRA
    Name: Microsoft .NET Framework 4.5 SDK
    Name: Easy Burner
    Name: Google Update Helper
    Name: Microsoft SQL Server 2012 Management Objects 
    Name: Microsoft Visual C++ 2010  x64 Runtime - 10.0.30319
    Name: Zune Language Pack (ELL)
    Name: Zune Language Pack (JPN)
    Name: Microsoft NuGet - Visual Studio 2012 Express for Windows 8
    Name: Steam
    Name: Blend for Visual Studio 2012 FRA resources
    Name: Version préparatoire de Microsoft Visual Studio 2012
    Name: Zune Language Pack (IND)
    Name: Microsoft Visual C++ 2012 Core Libraries
    Name: Windows Software Development Kit
    Name: Microsoft Help Viewer 1.0
    Name: Microsoft Visual Studio 2012 Shell (Minimum) Interop Assemblies
    Name: Visual Studio 2012 x86 Redistributables
    Name: PDF Architect
    Name: Zune Language Pack (DEU)
    Name: Microsoft Visual Studio 2010 Express Prerequisites x64 - FRA
    Name: Visual Studio 2010 Tools for SQL Server Compact 3.5 SP2 FRA
    Name: Zune Language Pack (ITA)
    Name: Zune Language Pack (CSY)
    Name: Microsoft Visual C++ 2005 Redistributable
    Name: Zune Language Pack (MSL)
    Name: Zune
    Name: Microsoft Visual C++ 2012 x64 Additional Runtime - 11.0.50727
    Name: Microsoft Help Viewer 2.0
    Name: Microsoft Visual C++ 2012 x64 Minimum Runtime - 11.0.50727
    Name: Microsoft Office Professional Edition 2003
    Name: Microsoft Visual C++ 2005 Redistributable
    Name: Windows Mobile Device Updater Component
    Name: WiX Toolset v3.8 Managed SDK
    Name: Microsoft Games for Windows Marketplace
    Name: AVG 2014
    Name: Microsoft SQL Server 2012 Data-Tier App Framework 
    Name: Objets de gestion Microsoft SQL Server 2008 R2
    Name: Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.17
    Name: Windows Software Development Kit for Windows Store Apps DirectX x64 Remote
    Name: Microsoft Silverlight
    Name: Zune Language Pack (SVE)
    Name: Microsoft SQL Server 2012 Data-Tier App Framework 
    Name: Zune Language Pack (ESP)
    Name: Microsoft Visual Studio 2012 Shell (Minimum)
    Name: LogMeIn
    Name: Microsoft SQL Server Compact 3.5 SP2 x64 FRA
    Name: NVIDIA PhysX
    Name: Microsoft SQL Server System CLR Types
    Name: Microsoft SQL Server Data Tools - FRA (11.1.20828.01)
    Name: Java Auto Updater
    Name: Version préparatoire de Microsoft Visual Studio 2012
    Name: Windows Software Development Kit for Windows Store Apps
    

    Que puis-je faire donc ??

    mardi 14 janvier 2014 22:38
  • Bonjour,

    Probablement qu'il y a une distinction entre HKEY_CURRENT_USER\Software et HKEY_LOCAL_MACHINE\Software ou encore que le "Select * from WIN32_Product" ne retourne que les programmes 32 bits !

    Si ton système est 64bits, il faudrait (peut-être) parcourir la base de registre et particulièrement HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ et récupérer là la liste des programmes.

    J'ai effectivement comparer ma liste de programmes et j'ai aussi des programmes absents ! Mais que je retrouve dans la base de registre à l'endroit que j'indique ici plus haut.

    Ci-dessous un code a adapter pour lire dans Wow6432Node

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim SoftwareKey As String = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products"
        Dim rk As RegistryKey
        rk = Registry.LocalMachine.OpenSubKey(SoftwareKey)
        Dim skname As String
        Dim sname As String = String.Empty
        Dim ListView1 As New ListView
        Me.Controls.Add(ListView1)
        ListView1.Dock = DockStyle.Fill
        ListView1.View = View.Details
        ListView1.Columns.Add("Installed Software")
        For Each skname In rk.GetSubKeyNames
        Try
        sname = Registry.LocalMachine.OpenSubKey(SoftwareKey).OpenSubKey(skname).OpenSubKey("InstallProperties").GetValue("DisplayName")
        ListView1.Items.Add(sname)
        Catch ex As Exception
        MsgBox(ex.Message)
        End Try
        Next
        ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent)
        End Sub
    
    

    Informations pour lire la base de registre :

    Si votre application est compilé en 32 bit et s'exécute dans un
    environnement 64-bit la lecture de la base de registre se fera au niveau
    de cette clé : "HKEY_LOCAL_MACHINE\Software\Wow6432Node"

    trouvé ici :http://social.msdn.microsoft.com/Forums/fr-FR/8190c8b1-4dd5-4a89-b06b-309fe2bc409f/registrygetvalue-x32x64?forum=vbasicfr

    Autres liens :

    http://msdn.microsoft.com/fr-fr/library/aa289494%28v=vs.71%29.aspx

    http://social.msdn.microsoft.com/Forums/fr-FR/885c8647-3bba-4dc3-9ac0-8c8a23466772/la-base-de-registres-bdr-accs-par-le-code-lire-crire-supprimer-une-clef?forum=vbasicfr

    Si je trouve quelques chose... je reviens :-)


    Jacques
    Si la réponse vous satisfait, n'oubliez pas de la proposer comme réponse. Merci



    mardi 14 janvier 2014 23:35
  • Bonjour

    Merci de ton aide.

    Comme je suis débutant, pour moi, c'est pas facile.

    Toutefois, j'ai le message : 

    Une exception non gérée du type 'System.NullReferenceException' s'est produite dans ComputerInformationReport.exe
    
    Informations supplémentaires : La référence d'objet n'est pas définie à une instance d'un objet.

    sur la ligne : 

    For Each skname In rk.GetSubKeyNames

    mercredi 15 janvier 2014 10:56
  • Bonjour,

    Ci-dessous un bout de code (testé!) qui retourne toutes les valeurs Wow6432Node

    Il te suffit de changer la première ligne et de remplacer le "OpenSubKey" si tu veux lire une autre clef.

     Dim vRegKeyLocalMachine As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Wow6432Node")
    
            For Each vSubKeyName As String In vRegKeyLocalMachine.GetSubKeyNames()
    
                Try
    
                    Dim vSubKey As RegistryKey = vRegKeyLocalMachine.OpenSubKey(vSubKeyName)
                    Debug.Print(vSubKey.ToString)
    
                    For Each vSSubKey As String In vSubKey.GetSubKeyNames()
                        Debug.Print(vSSubKey.ToString)
    
                    Next
    
                Catch ex As Exception
    
                End Try
            Next


    Jacques
    Si la réponse vous satisfait, n'oubliez pas de la proposer comme réponse. Merci

    mercredi 15 janvier 2014 11:57
  • Bonjour a tous,

    Il n'y aurait pas aussi un problème avec l'UAC ?

    peut être le désactiver ou mettre les droits necessaire a l'application ?


    Cordialement,

    jeudi 16 janvier 2014 21:51
    Auteur de réponse
  • Bonsoir

    Peut être mais comment faire ???

    Bonne nuit

    A+

    jeudi 16 janvier 2014 22:45
  • Bonjour,

    "La référence d'objet n'est pas définie à une instance d'un objet.. c'est pas un problème avec UAC. ! C'est un objet qui n'est pas initialisé . As-tu essayé le dernier code que je t'ai envoyé ?


    Jacques
    Si la réponse vous satisfait, n'oubliez pas de la proposer comme réponse. Merci


    jeudi 16 janvier 2014 23:00
  • Bonjour,

    Le premier code semble être pas mal avec des petites corrections
    (j'ai l'impression qu'il y a des caractère ascii, dans le debug j'ai eu des valeurs étrange) 

    Imports Microsoft.Win32
    
    Public Class Form1
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim Key As RegistryKey
            Dim Reader As RegistryKey
    
    
            If My.Computer.Info.OSPlatform = "Win32NT" Then
                Key = My.Computer.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", False)
            Else
                Key = My.Computer.Registry.LocalMachine.OpenSubKey("SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall", False) ' a vérifier
            End If
    
            For Each X In Key.GetSubKeyNames
                Reader = My.Computer.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & X, False)
    
                If Reader Is Nothing Then Continue For ' dans le cas ou la clef ne sera pas accessible
                If Reader.GetValue("DisplayName") <> "" Then
                    ListBox1.Items.Add(Reader.GetValue("DisplayName"))
                End If
            Next
        End Sub
    End Class
    

    J'attire votre attention sur les valeurs des programmes installés, elles ne sont pas forcément dans la même clef de registre. faire des petites recherches sur le net pour trouver 


    Cordialement,

    vendredi 17 janvier 2014 12:02
    Auteur de réponse
  • Mis à par le fait que j'aurais voulu que le résultat soit afficher dans un fichier texte, ton code marche nickel

    Mais, car il y a un mais (sinon, c'est pas marrant), il y a des manques.

    C'est surtout dommage de ne pas avoir mon antivirus (AVG pour moi) d'afficher.

    Par exemple, il me manque :
    - AVG
    - Epson (imprimante)
    - GIMP
    - VirtualBox
     WinDev
    - Zune
    - ...

    Il faut peut être regarder dans d'autres clé de registre ou je sais pas où

    Je vais voir si je trouve quelque chose

    vendredi 17 janvier 2014 17:44
  • Bonjour,

    J'ai trouvé comment faire pour en avoir plus (plus d'information sur les programmes installés)

    de plus j'ai eu le temps de tester le code que j'ai donné plus haut, il est fonctionnel oui mais ne fonctionne pas comme y devrait, je vais donc vous faire le code complet.

    vous devriez l'avoir (le code) plus tard.


    Cordialement,

    vendredi 17 janvier 2014 18:30
    Auteur de réponse
  • Voila le code avec les corrections

    Imports Microsoft.Win32
    
    Public Class Form1
        'SOFTWARE\Classes\Installer\Products
        'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
        'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim InstallerProduct As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Classes\Installer\Products")
            Dim CurrentUnistall32 As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
            Dim CurrentUnistall64 As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall")
    
            Dim KeyAll As New List(Of RegistryKey) From {InstallerProduct, CurrentUnistall32, CurrentUnistall64}
    
            For i As Integer = 0 To KeyAll.Count - 1
                For Each k In KeyAll(i).GetSubKeyNames
                    Dim SubKey As RegistryKey = Registry.LocalMachine.OpenSubKey(KeyAll(i).ToString.Replace("HKEY_LOCAL_MACHINE\", "") & "\" & k)
                    If SubKey.GetValueNames.Contains("ProductName") = True Then
                        Console.WriteLine(SubKey.GetValue("ProductName"))
                    ElseIf SubKey.GetValueNames.Contains("DisplayName") = True Then
                        Console.WriteLine(SubKey.GetValue("DisplayName"))
                    End If
                Next
            Next
        End Sub
    End Class
    


    Cordialement,

    vendredi 17 janvier 2014 19:55
    Auteur de réponse
  • Le code est mieux (cool !!)

    Il y a encore quelques manque malheureusement.

    Je voudrais que la liste soit affichée dans un fichier .txt (j'ai réussi à la faire) mais je voudrais que se soit dans l'ordre alphabétique (je sais pas si c'est possible).

    De plus, le fait de rechercher à plusieurs emplacement dans le registre, on se retrouve avec beaucoup de doublons.

    Comment éviter ces doublons ??

    Merci de votre aide.

    Bonne journée

    A+

    samedi 18 janvier 2014 13:47
  • Voilà c'est peut être pas optimum mais ça fonctionne :)

    Imports Microsoft.Win32
    Imports System.IO
    
    Public Class Form1
        'SOFTWARE\Classes\Installer\Products
        'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
        'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim InstallerProduct As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Classes\Installer\Products")
            Dim CurrentUnistall32 As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
            Dim CurrentUnistall64 As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall")
    
            Dim KeyAll As New List(Of RegistryKey) From {InstallerProduct, CurrentUnistall32, CurrentUnistall64}
            Dim KeyValProg As String = ""
            Dim FiltreDesDoublons As New Hashtable
            Dim ListProgrammes As New List(Of String)
            For i As Integer = 0 To KeyAll.Count - 1
                For Each k In KeyAll(i).GetSubKeyNames
                    Dim SubKey As RegistryKey = Registry.LocalMachine.OpenSubKey(KeyAll(i).ToString.Replace("HKEY_LOCAL_MACHINE\", "") & "\" & k)
                    If SubKey.GetValueNames.Contains("ProductName") = True Then
                        KeyValProg = SubKey.GetValue("ProductName").ToString.Trim
                    ElseIf SubKey.GetValueNames.Contains("DisplayName") = True Then
                        KeyValProg = SubKey.GetValue("DisplayName").ToString.Trim
                    End If
    
                    If FiltreDesDoublons.ContainsValue(KeyValProg) = False Then
                        FiltreDesDoublons.Add(KeyValProg, KeyValProg)
                        ListProgrammes.Add(KeyValProg)
                    End If
                Next
            Next
            ListProgrammes.Sort()
    
    
            ' Ecriture dans un fichier
            File.WriteAllLines("C:\temp\MonfichierProgrammes.txt", ListProgrammes)
    
            Process.Start("C:\temp\MonfichierProgrammes.txt")
        End Sub
    
    End Class


    Cordialement,

    samedi 18 janvier 2014 20:04
    Auteur de réponse
  • Bonjour

    Nikel

    Sauf (sinon, c'est pas marrant)

    Il me manque certaines application (pas beaucoup) : 
    CCleaner
    CPUID CPU-Z 1.64.0
    Epson SX420W Series Printer Uninstall
    Gimp 2.8.6
    Module linguistique de la visionneuse d'aide Microsoft 1.0 -FRA
    NVIDIA GeForce Experience 1.6.1
    NVIDIA Logiciel systéme PhysX 9.13.0725
    NVIDIA Pilote 3D Vision 331.58
    NVIDIA Pilote du controleur 3D Vision 331.58
    NVIDIA Pilote graphique 331.58
    NVIDIA Virtual Audio 1.2.5
    PhotoFiltre Studio X
    Speccy
    Square Enix Secure Launcher
    WinDev 17 Express
    WinRar 4.20(64-bit)

    Et j'ai en trop :

    Microsoft Visual C++ 2012 x64 Debug Runtime - 11.0.50727
    Microsoft Visual C++ 2012 x64 Minimum Runtime - 11.0.50727
    Microsoft Visual C++ 2012 x86 Additional Runtime - 11.0.50727
    Microsoft Visual C++ 2012 x86 Debug Runtime - 11.0.50727
    Microsoft Visual C++ 2012 x86 Minimum Runtime - 11.0.50727
    Microsoft Visual C++ 2012 x86-x64 Compilers
    Microsoft Visual Studio 2012 Express Prerequisites x64 - FRA
    Microsoft Visual Studio 2012 Shell (Minimum)
    Microsoft Visual Studio 2012 Shell (Minimum) Interop Assemblies
    Microsoft Visual Studio 2012 Tools pour SQL Server Compact 4.0 SP1 FRA
    Microsoft Visual Studio Express 2012 for Windows 8
    Microsoft Visual Studio Express 2012 for Windows Desktop
    Microsoft Visual Studio Team Foundation Server 2012 Object Model
    Microsoft Visual Studio Team Foundation Server 2012 Team Explorer
    Microsoft Visual Studio Ultimate 2012 XAML UI Designer Core
    Microsoft Visual Studio Ultimate 2012 XAML UI Designer fra Resources
    Module linguistique de Microsoft Visual Studio Team Foundation Server 2012 Team Explorer - FRA
    Module linguistique du modèle objet Microsoft Visual Studio Team Foundation Server 2012 - FRA
    NVIDIA PhysX
    NVIDIA Stereoscopic 3D Driver
    Ressources de Microsoft Visual Studio 2012 Shell (minimum)
    Update for Microsoft Visual Studio 2012 (KB2781514)
    Version préparatoire de Microsoft Visual Studio 2012
    Visual Studio Extensions for Windows Library for JavaScript
    Windows App Certification Kit Native Components
    Windows App Certification Kit x64
    Windows Mobile Device Updater Component
    Windows Runtime Intellisense Content - fr-fr
    Windows Software Development Kit
    Windows Software Development Kit DirectX x64 Remote
    Windows Software Development Kit DirectX x86 Remote
    Windows Software Development Kit for Windows Store Apps
    Windows Software Development Kit for Windows Store Apps DirectX x64 Remote
    Windows Software Development Kit for Windows Store Apps DirectX x86 Remote
    WiX Toolset v3.8 Core
    WiX Toolset v3.8 Managed SDK
    WiX Toolset v3.8 X64
    Zune Language Pack (CHS)
    Zune Language Pack (CHT)
    Zune Language Pack (CSY)
    Zune Language Pack (DAN)
    Zune Language Pack (DEU)
    Zune Language Pack (ELL)
    Zune Language Pack (ESP)
    Zune Language Pack (FIN)
    Zune Language Pack (FRA)
    Zune Language Pack (HUN)
    Zune Language Pack (IND)
    Zune Language Pack (ITA)
    Zune Language Pack (JPN)
    Zune Language Pack (KOR)
    Zune Language Pack (MSL)
    Zune Language Pack (NLD)
    Zune Language Pack (NOR)
    Zune Language Pack (PLK)
    Zune Language Pack (PTB)
    Zune Language Pack (PTG)
    Zune Language Pack (RUS)
    Zune Language Pack (SVE)

    Mieux vaut en avoir trop plutôt qu'il en manque !!

    De plus, je voudrais savoir comment faire pour écrire le résultat à la fin d'un fichier texte (.txt) déjà existant ?

    On peut se poser la question qui est :
    A partir de quoi, Windows trouve la liste des programmes qui sont affiché dans "Programmes et fonctionnalité" ?

    Bonne aprém
    A+

    dimanche 19 janvier 2014 15:57
  • Bonjour,

    Pour écrire dans un fichier existant :

     

    Dim FichierEcriture As NewStreamWriter(NomFichier, True, System.Text.Encoding.Default)

    Paramètres :  

    NomFichier = "C:\monfichier.txt"

    True = en mode "Append" donc ajoute à l'existant

    Encodage : encodage du fichier

    Pour écrire :

    FichierEcriture.Writeline("bla blab")

    Fermeture :

    FichierEcriture.close()


    Jacques
    Si la réponse vous satisfait, n'oubliez pas de la proposer comme réponse. Merci

    dimanche 19 janvier 2014 17:12
  • Bonjour,

    Je n'ai pour l'instant aucune explication sur la liste des programmes manquant

    J'ai essayé pas mal de chose (j'ai, aussi, installé CCleaner, et il est aussi manquant dans la liste), mais sans réussite pour le moment, ..., pourtant la clef du registre se trouve bien dans celle qui est indiquée ou faire les recherches et la Key DisplayName est bien présente ...

    J'ai essayé de changé les droits de l'application,c 'est toujours la meme chose ... toujours manquante ?!

    Je vais regarder encore


    Cordialement,

    dimanche 19 janvier 2014 18:09
    Auteur de réponse
  • Re

    J'ai pas tout regardé mais la lus part, devrait étre trouvé.

    Je sais pas si ce peut être le cas ici mais dans certains code que j'ai fais, certaines boucles "sautaient" des éléments car la boucle se faisait de 0 vers la fin et il m'a fallu faire la boucle de la fin vers 0.

    Je sais si j'ai bien expliqué.
    J'avais rencontré se problème en VBA sous Excel (c'est pas vraiment pareil mais on sais jamais)

    A+


    • Modifié FCL31 dimanche 19 janvier 2014 18:24
    dimanche 19 janvier 2014 18:24
  • Je ne pense pas que ça vienne de la :)

    Je pense que vous utilisez un système 64 bites et dans un système 64 b le registre est mal foutu car d’après ce que je comprends a la lecture dans les :

            Dim CurrentUnistall32 As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
            Dim CurrentUnistall64 As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall")
    

    C'est la même chose 

    C'est a dire

    La clef "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" donne les valeurs de "SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" mais pas pour toutes les clefs
    je pense qu'il faudra lire le registre a partir d'un ID (un pointeur) pour lire absolument les bonnes clefs

    ... a suivre


    Cordialement,

    dimanche 19 janvier 2014 21:43
    Auteur de réponse
  • Bonjour,

    Par défaut :

    Sur un système 64-bit l'accès à la clé suivante "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" dépend si votre application est en 32 ou 64-bit :

    Si votre application est en 64-bit, vous accéderez à la clé : "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"

    Si votre application est en 32-bit, vous accéderez à la clé : "SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"

    Vous avez la possibilité explicitement de consulter la ruche 32 et/ou 64 bit de la base de registre en utilisant la méthode OpenBaseKey via le paramètre "view" : http://msdn.microsoft.com/fr-fr/library/microsoft.win32.registrykey.openbasekey(v=vs.110).aspx

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    lundi 20 janvier 2014 00:48
    Modérateur
  • Bonjour 

    @Gille
    Savez vous pourquoi quand j’interroge la clef "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" il me donne les valeurs de  "SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" ?

    J'ai beau chercher je ne trouve pas d'information (bug ou pas ?)


    Cordialement,

    lundi 20 janvier 2014 07:22
    Auteur de réponse
  • Comme là dit Gilles (merci pour l'astuce)

    Imports Microsoft.Win32
    Imports System.IO
    
    Public Class Form1
        'SOFTWARE\Classes\Installer\Products
        'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
        'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim InstallerProduct As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Classes\Installer\Products")
            Dim CurrentUnistall3264 As RegistryKey
    
    
            If Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") = "x86" Then '32
                CurrentUnistall3264 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")
            Else '64
                CurrentUnistall3264 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey("SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall")
            End If
    
            Dim KeyAll As New List(Of RegistryKey) From {InstallerProduct, CurrentUnistall3264}
    
    
            Dim KeyValProg As String = ""
            Dim FiltreDesDoublons As New Hashtable
            Dim ListProgrammes As New List(Of String)
            For i As Integer = 0 To KeyAll.Count - 1
                If KeyAll(i) IsNot Nothing Then
                    For Each k In KeyAll(i).GetSubKeyNames
                        Dim SubKey As RegistryKey = Registry.LocalMachine.OpenSubKey(KeyAll(i).ToString.Replace("HKEY_LOCAL_MACHINE\", "") & "\" & k)
                        If SubKey.GetValueNames.Contains("ProductName") = True Then
                            KeyValProg = SubKey.GetValue("ProductName").ToString.Trim
                        ElseIf SubKey.GetValueNames.Contains("DisplayName") = True Then
                            KeyValProg = SubKey.GetValue("DisplayName").ToString.Trim
                        End If
    
                        If FiltreDesDoublons.ContainsValue(KeyValProg) = False Then
                            FiltreDesDoublons.Add(KeyValProg, KeyValProg)
                            ListProgrammes.Add(KeyValProg)
                        End If
                    Next
                End If
    
            Next
            ListProgrammes.Sort()
    
    
            ' Ecriture dans un fichier
    
            Dim LogAddRemoveProgramms As New StreamWriter("C:\temp\MonfichierProgrammes.txt", True)
            For i As Integer = 0 To ListProgrammes.Count - 1
                LogAddRemoveProgramms.WriteLine(ListProgrammes(i))
            Next
    
            LogAddRemoveProgramms.Close()
            'File.WriteAllLines("C:\temp\MonfichierProgrammes.txt", ListProgrammes)
    
            Process.Start("C:\temp\MonfichierProgrammes.txt")
      
        End Sub
    
    End Class

    Je n'ai pas fait de test, je ne connais pas le resultat ...


    Cordialement,

    lundi 20 janvier 2014 16:04
    Auteur de réponse
  • Merci pour les précisions et  aussi pour le code.

    Après essai, je n'ai pas fait un comparatif exact entre les deux résultats des deux codes mais avec le dernier code, il manque toujours les soft mentionnés plus haut.

    Je suis pas sur que le résultat soit différent (je vais pas me plaindre, je suis loin d’être capable de faire un tel code).

    Même si je ne suis que débutant et que je ne comprend pas tout le code en entier, je ne comprend pas pourquoi le code ne marche pas complètement car la recherche me parait se faire dans les bonnes clés avec les bonnes Noms de valeurs !!

    lundi 20 janvier 2014 16:50
  • Bonjour
    Je dirais que dans le cas d'un système 64 bits vous devez chercher
    SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
    ET
    SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
    Vous pouvez vérifier avec Regedit les valeurs qui se trouve dans ces locations

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mardi 21 janvier 2014 13:40
  • Bonjour,

    J'ai fait un code que je n'ai pas encore tester sur du 64b
    Je pense qu'il est plus propre, plus facile a comprendre est plus fonctionnel.

    Je testerais ça et je vous le donnerais par la suite.

    A bientôt


    Cordialement,

    mardi 21 janvier 2014 13:56
    Auteur de réponse
  • J'ai teste avec les deux clefs et ça ne fonctionne pas.
    Veuillez essayer le code trouvé ici:

    http://code.msdn.microsoft.com/windowsdesktop/Get-a-list-of-Installed-9620d03d

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mardi 21 janvier 2014 14:22
  • Bonjour

    @Aurel, le code fonctionne mais en WMI cela prend des fois très longtemps avant d'avoir un résultat

    J'ai essayé de comprendre pourquoi ça fonctionne dans un sens et pas dans l'autre, mais ...
    Voila le code que j'ai fait, mais il faut savoir qu'il faudra changer un paramètre dans les propriétés

    Imports Microsoft.Win32
    Imports System.IO
    
    
    Public Class Form1
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim ClassesInstallerProducts As RegistryKey = My.Computer.Registry.LocalMachine.OpenSubKey("Software\Classes\Installer\Products")
            Dim Wow6432Node As RegistryKey = My.Computer.Registry.LocalMachine.OpenSubKey("Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall")
            Dim StdUninstall As RegistryKey = My.Computer.Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Uninstall")
            Dim CurrentUserUnistall As RegistryKey = My.Computer.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Uninstall")
            Dim CurrentUserProducts As RegistryKey = My.Computer.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Installer\Products")
    
            Dim ListDesClefs As New List(Of RegistryKey())
            ListDesClefs.Add({ClassesInstallerProducts, Wow6432Node, StdUninstall, CurrentUserUnistall, CurrentUserProducts})
    
            For Each UserSid As String In My.Computer.Registry.Users.GetSubKeyNames
    
                Dim CurrUnInstall As RegistryKey = My.Computer.Registry.Users.OpenSubKey(UserSid & "\Software\Microsoft\Windows\CurrentVersion\Uninstall")
                Dim CurrUserInstallerProducts As RegistryKey = My.Computer.Registry.Users.OpenSubKey(UserSid & "\Software\Microsoft\Installer\Products")
                ListDesClefs.Add({CurrUnInstall, CurrUserInstallerProducts})
            Next
    
    
    
            Dim AllGetValue As New Hashtable
            Dim AllGetValueSorted As New List(Of String)
            AllGetValue.Clear()
            AllGetValueSorted.Clear()
    
            Dim CheckExist = Sub(Val)
                                 If AllGetValue.ContainsValue(Val.ToString.ToLower.Trim) = False Then
                                     AllGetValue.Add(Val.ToString.ToLower.Trim, Val.ToString.ToLower.Trim)
                                     AllGetValueSorted.Add(Val)
                                     Console.WriteLine(Val)
                                 End If
                             End Sub
            For ii As Integer = 0 To ListDesClefs.Count - 1
                For i As Integer = 0 To ListDesClefs(ii).Count - 1
                    If ListDesClefs(ii)(i) Is Nothing Then Continue For
                    For Each OpenSubKey In ListDesClefs(ii)(i).GetSubKeyNames()
                        If ListDesClefs(ii)(i).OpenSubKey(OpenSubKey).GetValueNames().Contains("ProductName") = True Then
                            CheckExist(ListDesClefs(ii)(i).OpenSubKey(OpenSubKey).GetValue("ProductName"))
                        ElseIf ListDesClefs(ii)(i).OpenSubKey(OpenSubKey).GetValueNames().Contains("DisplayName") = True Then
                            CheckExist(ListDesClefs(ii)(i).OpenSubKey(OpenSubKey).GetValue("DisplayName"))
                        End If
                    Next
                Next
            Next
            AllGetValueSorted.Sort()
    
            ' Ecriture dans un fichier
    
            Dim LogAddRemoveProgramms As New StreamWriter("C:\temp\MonfichierProgrammes.txt", False)
            For i As Integer = 0 To AllGetValueSorted.Count - 1
                LogAddRemoveProgramms.WriteLine(AllGetValueSorted(i), False)
            Next
            LogAddRemoveProgramms.Close()
    
    
            Process.Start("C:\temp\MonfichierProgrammes.txt")
    
        End Sub
    
    
    End Class
    Il faut aller dans le menu Projet et Propriété du projet


    Cordialement,


    • Modifié TroxsaEditor mardi 21 janvier 2014 19:32 correction
    mardi 21 janvier 2014 19:31
    Auteur de réponse
  • Bonjour

    Je viens de tester ton code (en modifiant les propriété du projet).

    Mais j'ai le message suivant :

    Une exception non gérée du type 'System.Security.SecurityException' s'est produite dans mscorlib.dll

    Informations supplémentaires : Accès au registre demandé non autorisé.

    Que dois-je faire ?

    Petite question supplémentaire : Le fait de faire la modif dans les propriété, cela ne fait pas que l'appli ne fonctionnera que en 64 bits ?

    PS, je suis sous Windows 8.1 64bits

    A+

    mercredi 22 janvier 2014 09:56
  • Oui, c'est bien ça !

    Essayer de starter le programme avec les droits administrateur ...

    C'est pour l'instant la seule solution que j'ai trouvé, peut être faire un forçage comme la dit Gilles ...
    Et la solution de Aurel est fonctionnel mais cela prend plus de temps (requête WMI)

    J'essayerais encore de regarder un peux en fonction du temps qui mes disponibles.

    A bientot


    Cordialement,

    mercredi 22 janvier 2014 12:11
    Auteur de réponse
  • Nikel

    Avec les droits admin, ça a l'air d’être bon.

    Il serait bien de pouvoir l’exécuter sans les droits admin et surtout avec des systèmes 32 bits.

    Je vais être ch***t mais je voudrais aussi changer cette partie de ton code :

            Dim LogAddRemoveProgramms As New StreamWriter("C:\temp\MonfichierProgrammes.txt", False)
            For i As Integer = 0 To AllGetValueSorted.Count - 1
                LogAddRemoveProgramms.WriteLine(AllGetValueSorted(i), False)
            Next
            LogAddRemoveProgramms.Close()

    pour pouvoir avoir le résultat en fin d'in fichier .txt  déjà existant : HOMEDRIVE & "\Users\" & USERNAME & "\Desktop\Rapport.txt"

    Sans supprimer le contenu déjà existant bien sur.

    Merci de l'aide que tout le monde m'apporte.

    A+

    mercredi 22 janvier 2014 12:25
  • Bonjour,

    Dim FichierEcriture As New StreamWriter(NomFichier, True, System.Text.Encoding.Default)

    True permettant l'ajout en fin de fichier.

    avant de fermer le StreamWriter :

    FichierEcriture.WriteLine("HOMEDRIVE & "\Users\" & USERNAME & "\Desktop\Rapport.txt")

    FichierEcriture.close()


    Jacques
    Si la réponse vous satisfait, n'oubliez pas de la proposer comme réponse. Merci

    mercredi 22 janvier 2014 12:42
  • Je me permet de mettre cette partie en forme, comme Jacques là dit

    Dim LogAddRemoveProgramms As New StreamWriter(HOMEDRIVE & "\Users\" & USERNAME & "\Desktop\Rapport.txt", True, System.Text.Encoding.Default)
            For i As Integer = 0 To AllGetValueSorted.Count - 1
                LogAddRemoveProgramms.WriteLine(AllGetValueSorted(i), False)
            Next
            LogAddRemoveProgramms.Close()
    

    Comme j'ai dit plus haut, je verrais le code en fonction du temps qui mes disponibles.
    Je regarderais certainement ce week car là j'ai du boulot 


    Cordialement,

    mercredi 22 janvier 2014 13:56
    Auteur de réponse
  • Merci j'avais dejà modifer le code mais j'ai seulement mis :

    Dim LogAddRemoveProgramms As New StreamWriter(HOMEDRIVE & "\Users\" & USERNAME & "\Desktop\Rapport.txt", True)

    Je sais pas se que change le fin : 

    System.Text.Encoding.Default

    mais je l'avais pas mis.

    Grave ou pas ??

    mercredi 22 janvier 2014 14:46
  • Non ce n'est pas grave, c'est surtout pour la prise en compte des caractères avec des accents 

    Mais si vous avez des lignes avec des caractères bizarre du style carré ou des blocs noir rond, il faudra l'ajouté voir meme de force en UTF6 ou 8.

    A bientôt.


    Cordialement,

    jeudi 23 janvier 2014 15:37
    Auteur de réponse
  • Bonjour

    C'est sur que c'est mieux.

    J'allais poser la question plus tard  pour les accent.

    Toujours est-il que ça ne marche pas :

    System.Text.Encoding.Default

    ou autres

    System.Text.Encoding. XXX

    Bonne journée

    A+

    vendredi 24 janvier 2014 10:46