Installierte Programme deinstallieren

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von vbfreak100.

    Installierte Programme deinstallieren

    Hallo Leute,

    mein Problem liegt dabei, dass ich zwar installierte Programme aus der Regisrty auslesen kann, ich weiß aber nicht, wie ich diese dann deinstallieren kann.
    Ich stelle mir so etwas wie bei "Software" in den Systemeinstellungen bei XP, oder "Programme ..." bei Win7.
    Ich habe schon bei Google und hier geguckt, aber keine klare Lösung zum Deinstallieren gefunden.
    Habe zwar das gefunden, aber diese Lösung wollte ich nicht:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim sName As String = String.Empty
    3. Dim sMachineName As String = String.Empty
    4. Dim sAdminUser As String = String.Empty
    5. Dim sPassword As String = String.Empty
    6. Dim oService As Object
    7. Dim oLocator As Object
    8. sMachineName = InputBox("Bitte geben Sie den Computern an!")
    9. sAdminUser = InputBox("Enter the admin user name.")
    10. sPassword = InputBox("Enter the users password. ")
    11. oLocator = CreateObject("WbemScripting.SWbemLocator")
    12. 'connect to remote machine
    13. oService = oLocator.ConnectServer(sMachineName, "root\cimv2", sAdminUser, sPassword)
    14. 'get a list of installed products
    15. Dim sMsg As String = String.Empty
    16. For Each oProduct As Object In GetObject("winmgmts:{impersonationLevel=impersonate,(Debug)}").InstancesOf("win32_Product")
    17. 'Wollen wir wirklich das Ausgewählte Produkt deinstallieren?
    18. sMsg = "Product: " & vbCrLf
    19. sMsg = sMsg & oProduct.Name
    20. sMsg = sMsg & vbCrLf & "Continue uninstalling?"
    21. If MsgBox(sMsg, 4) = 6 Then
    22. sName = oProduct.Name
    23. Exit For
    24. End If
    25. Next
    26. Try
    27. 'Get the named package of the selected Product
    28. For Each oProduct As Object In GetObject( _
    29. "winmgmts:{impersonationLevel=impersonate}" _
    30. ).ExecQuery _
    31. ("Select * from Win32_Product where Name='" & sName & "'")
    32. 'uninstall selected Product
    33. oProduct.Uninstall()
    34. 'done!
    35. MessageBox.Show("Uninstalled " & sName, "Operation Complete", MessageBoxButtons.OK)
    36. Next
    37. Catch ex As Exception
    38. MessageBox.Show(ex.Message & sName, "Operation NOT Completed", MessageBoxButtons.OK)
    39. End Try
    40. End Sub




    Danke im Vorraus

    Tobias

    vbfreak100 schrieb:

    wie ich diese dann deinstallieren kann.
    Mach es über die Systemsteuerung :!:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja und wie komme ich auf den drauf?????

    Zum anzeigen der installierten Programme nutze ich:

    VB.NET-Quellcode

    1. Dim alleProgramme As New StringCollection()
    2. Dim regKeyPfad As String = "Software\Microsoft\Windows\CurrentVersion\Uninstall"
    3. Dim regKey As RegistryKey = Registry.LocalMachine.OpenSubKey(regKeyPfad)
    4. If regKey IsNot Nothing Then
    5. Dim subKeyNames As String() = regKey.GetSubKeyNames()
    6. For i As Integer = 0 To subKeyNames.Length - 1
    7. Dim subKey As RegistryKey = regKey.OpenSubKey(subKeyNames(i))
    8. Dim programmName As String = DirectCast(subKey.GetValue("DisplayName"), String)
    9. If programmName Is Nothing Then
    10. programmName = DirectCast(subKey.GetValue("QuitDisplayName"), String)
    11. End If
    12. If programmName IsNot Nothing Then
    13. alleProgramme.Add(programmName)
    14. End If
    15. Next
    16. Else
    17. Throw New Exception("Registry-Schluessel" & Registry.LocalMachine.Name & "" & regKeyPfad & " nicht gefunden")
    18. End If
    19. Return alleProgramme
    Wie waere es denn mit dem Wert UninstallString in der Registry?

    EDIT: Dein erster Code ist nicht zu empfehlen. Er nimmt WMI, was dann die Performance verschlechtert und die Verwendung von WMI ist nicht VB.NET-konform.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Jonas Jelonek“ ()