Hallo zusammen,
ich hab ein riiiiesiges Problem! Ich versuche vergebens seit Montag ein Skript zu schreiben (.vbs, hab ich noch nie gemacht ) welches mir aus der Windows Registry aus \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall die ganzen UninstallStrings ausliest, diese irgendwie speichert (oder nur so damit weiter arbeitet) und dann den UninstallString mit anderen Parametern für MsiExec ausführt. Und zwar soll das wie folgt aussehen:
Der in der Registry stehende UninstallString sieht wie folgt aus:
Das X muss weg, das ist ja die Deinstallation Das Skript soll aber die Desktop-/ Startmenusymbole von Programmen wiederherstellen (/fs) und das Ganze im Hintergrund ohne Benachrichtigung (/qn)
Für jegliche Hilfe (sofern ich im richtigen Forum bin?!) wäre ich sehr dankbar!
Mfg,
Jens
P.S.:
ich hab hier schon ein Skript, das irgendwas mit dem UninstallString anstellt! Ich weiß nur leider nicht was, also bringts mir nix
ich hab ein riiiiesiges Problem! Ich versuche vergebens seit Montag ein Skript zu schreiben (.vbs, hab ich noch nie gemacht ) welches mir aus der Windows Registry aus \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall die ganzen UninstallStrings ausliest, diese irgendwie speichert (oder nur so damit weiter arbeitet) und dann den UninstallString mit anderen Parametern für MsiExec ausführt. Und zwar soll das wie folgt aussehen:
Code:
MsiExec.exe /qn /fs {UninstallString}
Der in der Registry stehende UninstallString sieht wie folgt aus:
Code:
MsiExec.exe /X{UninstallString}
Das X muss weg, das ist ja die Deinstallation Das Skript soll aber die Desktop-/ Startmenusymbole von Programmen wiederherstellen (/fs) und das Ganze im Hintergrund ohne Benachrichtigung (/qn)
Für jegliche Hilfe (sofern ich im richtigen Forum bin?!) wäre ich sehr dankbar!
Mfg,
Jens
P.S.:
ich hab hier schon ein Skript, das irgendwas mit dem UninstallString anstellt! Ich weiß nur leider nicht was, also bringts mir nix
Code:
Option Explicit
DIM WshShell, fs
Set WshShell = WScript.CreateObject ("WScript.Shell")
Set fs=CreateObject("Scripting.FileSystemObject")
Function GetUnInstallString(strSearchName, strSearchPath)
'*** Ermittelt den UnInstall-Aufruf anhand des Quellpfades bzw. Anzeigenamens ***
Const UnInstKey = "\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
Const UnInstKeyWSH = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
Dim objReg, oRootkey, oSubKey, oVal, bDerWars, strUninstall
If strSearchName = "" Then
'*** Vorgabe: Nicht gefunden ***
GetUnInstallString = ""
Else
'*** Vorgabe: strSearchName als Registry-Schlüssel versuchen ***
GetUnInstallString = TryRegRead(UnInstKeyWSH + strSearchName + "\UninstallString")
If GetUnInstallString <> "" Then Exit Function
End If
If not DebugMode Then On Error Resume Next
' Erzeuge Objektreferenz auf Regobj.dll
Set objReg = WScript.CreateObject("RegObj.Registry")
If Err.Number <> 0 Then
'*** Versuch, die RegObj.dll zu installieren ***
fs.CopyFile GetDfsShare + RegobjDllSrcFolder + "\Regobj.dll", _
WshShell.ExpandEnvironmentStrings("%SYSTEMROOT%\System32\"), True
WshShell.Run "RegSvr32.exe /s ""%SYSTEMROOT%\System32\RegObj.dll""", , True
Err.Clear
'*** 2. Versuch, das Objekt zu instanziieren ***
Set objReg = WScript.CreateObject("RegObj.Registry")
End If
' Hole Auflistungsobjekt des Hauptschlüssels
Set oRootkey = objReg.RegKeyFromString(UnInstKey)
'*** Nicht erfolgreich => Ergebnis bleibt leer ***
If Err.Number <> 0 Then Exit Function
On Error goto 0
'*** Uninstall-Abschnitt in der Registry nach passenden Einträgen durchsuchen ***
bDerWars = False
For Each oSubKey In oRootkey.SubKeys 'Alle eingetragenen Produkte
strUninstall = ""
For Each oVal In oSubKey.Values 'Alle Einträge je Produkt
Select Case UCase(oVal.Name)
Case UCase("InstallSource")
'*** Quellpfad wie angegeben? ***
If Instr(UCase(oVal.Value), UCase(strSearchPath)) > 0 and strSearchPath <> "" Then
bDerWars = True
End If
Case UCase("DisplayName")
'*** Name ggf. wie angegeben? ***
If UCase(strSearchName) = UCase(oVal.Value) and strSearchName <> "" Then
bDerWars = True
End If
Case UCase("UninstallString")
'*** Befehlszeile für die Deinstallation ***
strUninstall = oVal.Value
End Select
Next
If bDerWars Then
'*** Korrekten Eintrag gefunden ***
If UCase(Left(strUninstall, 7)) = "MSIEXEC" and _
Left(oSubKey.Name, 1) = "{" Then
'*** Sonderfall MSI-Setup: Deinstallation per Parameter /X ***
GetUnInstallString = "MsiExec.exe /X" + oSubKey.Name
Else
'*** Sonstige Deinstallationstoutine ***
GetUnInstallString = strUninstall
End If
Exit For
End If
Next
End Function
Zuletzt bearbeitet: