Programm über VBS mit Parameter starten

nierewa

Lt. Junior Grade
Registriert
Juni 2008
Beiträge
414
Hallo,

ich versuche per vbs eine Datei auszuführen.
Leider bin ich ein totaler Neuling.

Da ich nicht weiß wo die Datei liegt, muß ich sie erst suchen. Das mache ich so:

Code:
On Error Resume Next
Dim strList

filename = "Avira.OE.Setup.Bundle.exe"     ' Die Daei nach der ich suche

Set objFSO = WScript.CreateObject("Scripting.FilesystemObject")
ProcFolders objFSO.GetFolder("C:\ProgramData\Package Cache")
If strList = "" Then strList = "Datei nicht gefunden."

MsgBox strList              ' Pfad inkl. Dateiname

Sub ProcFolders(objFolder)
  For Each objFile In objFolder.Files
    If LCase(filename) = LCase(objFile.Name) Then
    strList = strList & objFile.Path & vbCrLf
    End If
  Next
  For Each objSubFolder In objFolder.SubFolders
    On Error Resume Next
    ProcFolders(objSubFolder)
    On Error Goto 0
  Next
End Sub

Jetzt möchte ich die Datei ausführen. Das versuche ich so:
Code:
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run("strList")
Doch leider passiert so gar nichts. Kann mir dabei jemand helfen?

@Silverangel
Das ist keine Hausaufgabe ;)
 
Zuletzt bearbeitet:
WshShell.Run musst Du als Parameter ein String übergeben mit dem Dateinamen (ggf. mit Pfad) von dem Programm welches Du aufrufen willst. Wenn strList eine Variable ist, musst Du natürlich
WshShell.Run(strList)
schreiben.
Sonst versucht er das Programm strList aufzurufen, welches es vermutlich nicht gibt. Was Du aber eher willst ist das was in strList drin steht als Programmnamen zu nehmen.
 
Wenn strList eine Variable ist, musst Du natürlich WshShell.Run(strList) schreiben.
Da hast Du natürlich recht. Es funktioniert aber auch ohne " " nicht.
Zum Test hab ich das was in strList drin steht mal mit Win+R ausgeführt, das funktioniert.

Das steht übrigens drin:
Code:
C:\ProgramData\Package Cache\{161e6084-b0f5-43e8-86d8-09eda5c0893d}\Avira.OE.Setup.Bundle.exe
Ergänzung ()

In der Zwischenzeit hab ich etwas anderes versucht.
Anscheinend war der Pfad nicht richtig.

Code:
Set app = CreateObject("Shell.Application")
app.ShellExecute strList, , , "runas", 3
... brachte die Fehlermeldung das die Datei nicht gefunden wurden konnte.

So geht es jetzt:
Code:
'nur den Pfad ermitteln
search="Avira"
result=left (strList, instr(strList, search)-1)
programm = result & filename 'alles wieder zusammen bauen

' das Programm ausführen
Set app = CreateObject("Shell.Application")
app.ShellExecute programm, "runas" ,3

Wie kann ich jetzt noch die Parameter /uninstall und /quiet hinzufügen?
Ergänzung ()

Vielleicht zur Erklärung was ich überhaupt erreichen will.
(Hätte ich wohl von Anfang an schreiben sollen 😊)

Wir benutzen Lansweeper und dessen Deployment-Tool.
Ich deinstalliere darüber Avira mit dem Befehl: [Avira Programm Verzeichnis]\SETUP.EXE /remsilentnoreboot
Das funktioniert super.

Danach lasse ich Eset Endpoint Security installieren.
Funktioniert auch super.

Nur den blöden Avira Launcher bekomme ich nicht runter.
Den kann man mittels Admin-CMD über: [Pfad]\Avira.OE.Setup.Bundle.exe /uninstall /quiet
deinstallieren. Deshalb der weg über ein vb-script.
 
Zuletzt bearbeitet:
Für alle die es interessiert, ich hab es jetzt über Powershell gelöst.
Ist um ein Vielfaches einfacher:

PowerShell:
& "C:\Program Files (x86)\Avira\Antivirus\SETUP.EXE" /remsilentnoreboot
$datei=get-childitem "C:\ProgramData\Package Cache" -recurse | Where-Object {$_.Name -like "*Avira.OE.Setup.Bundle.exe*"} | select -Expand FullName
& $datei /uninstall /quiet

Das ganze wird in Lansweeper mit in einem Commando verpackt:
Code:
powershell.exe -executionpolicy bypass -file "{PackageShare}\Scripts\AviraDeinstall.ps1"
 
  • Gefällt mir
Reaktionen: andy_m4
Ja. Vieles geht über die PowerShell besser als via das alten VB-Script-Geraffel.
Danke für die ausführliche Dokumentation der Vorgehensweise (inkl. der missglückten Umwege). Finde ich vorbildlich. Gerade so in Hinblick auf manch andere Fragesteller hier.
 
  • Gefällt mir
Reaktionen: nierewa
Zurück
Oben