VB Script Pfad als Parameter übergeben & Funktion aufrufen

  • VBScript

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von sabrina123451.

    VB Script Pfad als Parameter übergeben & Funktion aufrufen

    Hallo zusammen,

    ich habe folgende Frage zu meinem Programm ich möchte gerne den Pfad (unten in meinem Script zu sehen) als Parameter übergeben, wird vllt. für euch eine einfache Lösung sein. Aber für mich leider in erster Linie nicht :)
    Desweiteren würde ich gerne die Funktion (oben) in meinem Script aufrufen, wie mache ich dies am besten?

    Ich hoffe man kann mir helfen :)

    LG Sabrina

    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Function RestartScriptIn32BitMode() 'DIESE FUNKTION UNTEN AUFRUFEN
    2. ' Check if script is running in 32 bit mode
    3. Dim ScriptHost : ScriptHost = Mid(WScript.FullName, InStrRev(WScript.FullName, "\") + 1, Len(WScript.FullName))
    4. Dim oWs : Set oWs = CreateObject("WScript.Shell")
    5. Dim oProcEnv : Set oProcEnv = oWs.Environment("Process")
    6. ' Am I running 64-bit version of WScript.exe/Cscript.exe? So, call script again in x86 script host and then exit.
    7. If InStr(LCase(WScript.FullName), LCase(oProcEnv("windir") & "\System32\")) And oProcEnv("PROCESSOR_ARCHITECTURE") = "AMD64" Then
    8. ' rebuild arguments
    9. If Not WScript.Arguments.Count = 0 Then
    10. Dim sArg, Arg
    11. sArg = ""
    12. For Each Arg In Wscript.Arguments
    13. sArg = sArg & " " & """" & Arg & """"
    14. Next
    15. End If
    16. Dim sCmd : sCmd = """" & oProcEnv("windir") & "\SysWOW64\" & ScriptHost & """" & " """ & WScript.ScriptFullName & """" & sArg
    17. oWs.Run sCmd
    18. WScript.Quit
    19. End If
    20. End Function
    21. Set Project = CreateObject("IswiAuto20.ISWiProject")
    22. strFile = "C:\InstallShield 2013 Projects\test.ism" 'DIESER PFAD SOLL ALS PARAMETER ÜBERGEBEN WERDEN
    23. 'Öffnen des Projekts
    24. project.OpenProject strFile
    25. 'ProductVersion wird verändert
    26. project.ProductVersion = IncVersion(project.ProductVersion)
    27. 'Speichern des Projekts
    28. project.SaveProject
    29. 'Schliessen des Projekts
    30. project.CloseProject
    Eine Funktion rufst du auf, indem du sie einfach schreibst:

    Visual Basic-Quellcode

    1. RestartScriptIn32BitMode


    Du übergibst den Pfad ja schon als Parameter

    Visual Basic-Quellcode

    1. strFile = "C:\InstallShield 2013 Projects\test.ism" 'DIESER PFAD SOLL ALS PARAMETER ÜBERGEBEN WERDEN
    2. project.OpenProject strFile

    Was genau funktioniert denn nicht ?
    Das ist meine Signatur und sie wird wunderbar sein!
    Hi

    du kannst zB die Datei auf das Script ziehen via Drag and Drop und im Script dann so verwenden:

    Visual Basic-Quellcode

    1. if Wscript.Arguments.count > 0 Then
    2. path = WScript.Arguments.Item(0)
    3. else 'falls nix übergeben wurde anders behandeln
    4. end if

    Das ist meine Signatur und sie wird wunderbar sein!
    Hallo nochmal,

    würde gerne noch zwei Erweiterungen in mein Programm hinzufügen und zwar folgende:

    - Falls kein File mitgegeben wurde, sollte eine Fehlermeldung ausgegeben werden. (Gibt es noch was anders ausser MsgBox?)
    - Es sollte die IS-Version rausgefunden werden (HKLM/SOFTWARE/InstallShield) und dann entsprechend das ISWIAutoXX-Object angelegt werden.

    Wie wäre dies möglich?
    LG

    sabrina123451 schrieb:

    Gibt es noch was anders ausser MsgBox?
    Wscript.Echo.
    Solange du dein Script mittels WScript ausführst (z.B. per Doppelklick), wird das aber auch in einer MsgBox enden.
    Es gibt aber eine Console-Ausgabe, wenn du das Script über CScript ausführst.

    sabrina123451 schrieb:

    Falls kein File mitgegeben wurde, sollte eine Fehlermeldung ausgegeben werden
    Dafür ist in Post #4 der Else-Zweig da.

    sabrina123451 schrieb:

    Es sollte die IS-Version rausgefunden werden
    http://ss64.com/vb/regread.html
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Habe die erste Lösung nun wie folgt gelöst:

    Visual Basic-Quellcode

    1. if Wscript.Arguments.count > 0 Then
    2. strFile = WScript.Arguments.Item(0)
    3. else
    4. WScript.Echo "Die Datei wurde nicht gefunden, bitte wählen Sie eine Datei aus!"
    5. end if


    Wie kann man denn Werte aus der Registry auslesen? (In meinem Fall HKLM/SOFTWARE/InstallShield) und davon die InstallShield Version.

    Hat da Jemand vielleicht ein Beispiel?
    Habe nun folgendes versucht:

    Visual Basic-Quellcode

    1. strCurrentVersion = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\InstallShield\"
    2. Set Project = CreateObject("IswiAuto20.ISWiProject")
    3. WScript.Echo "CurrentVersion: " objShell.RegRead(strCurrentVersion)
    4. if Wscript.Arguments.count > 0 Then
    5. strFile = WScript.Arguments.Item(0)
    6. else
    7. WScript.Echo "Die Datei wurde nicht gefunden, bitte wählen Sie eine Datei aus und führen Sie diese auf dem Script aus!"
    8. end if


    Nur leider funktioniert es nicht, mir wird folgendes Fehler angezeigt:
    Fehler: Anweisungsende erwartet
    Code: 800A0401

    Woran könnte dies liegen? Vielleicht weil ich bei mir ein spezielles verwende was extra für InstallShield ist? (IswiAuto20.ISWiProject)
    Ich nehme an, es liegt daran, dass du objShell nicht zugewiesen hast.

    Fehler lassen sich am besten mit einem vernünftigen Debugger finden.
    Da gibt es VbsEdit.
    Oder die Poor-Man's-Variante:
    VBS-Code lässt sich annähernd perfekt in der VBA-Umgebung von Office (z.B. Excel) debuggen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Verzweifel langsam :/ kommen immer wieder Fehler...

    Ziel ist es das ich die InstallShield-Version auslesen kann und dann wenn zb die Version 20.0 ist dann soll er mir den IswiAuto20.ISWiProject ausführen und wenn es eine 19.0 Version ist den IswiAuto19.ISWiProject ausführen... :/

    Klingt eigentlich simpel ... einfach den Wert auslesen und dann ne Schleife anwenden aber weiss nicht wie das Ganze zusammen gesetzt wird :/
    Habe den Fehler gefunden, lag am Pfad für die Registry zu lesen. Habe jetzt aber eine Methode die mir das ganze dann abfragt.

    Jetzt ist nur noch die Sache mit der Schleife wenn z.b. 20.0 soll er mir den IswiAuto20.ISWiProject verwenden bei 19.0 den IswiAuto19.ISWiProject bei 21.0 IswiAuto21.ISWiProject etc.

    Hier ist mein bisheriger Code für den Teil:

    Visual Basic-Quellcode

    1. Const HKEY_LOCAL_MACHINE = &H80000002
    2. strComputer = "."
    3. Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
    4. strComputer & "\root\default:StdRegProv")
    5. strKeyPath = "SOFTWARE\Wow6432Node\InstallShield"
    6. objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
    7. For Each Subkey in arrSubKeys
    8. Wscript.Echo Subkey
    9. Next
    10. Set Project = CreateObject("IswiAuto20.ISWiProject")
    11. if Wscript.Arguments.count > 0 Then
    12. strFile = WScript.Arguments.Item(0)
    13. else
    14. WScript.Echo "Die Datei wurde nicht gefunden, bitte wählen Sie eine Datei aus!"
    15. end if


    Frage ist jetzt nur noch wie ich das am besten in einer Schleife zusammen packe.
    Habe mir jetzt eine andere Methode ausgesucht indem ich die Strings einfach wieder zusammen setze...

    Nur irgendwie scheint etwas mit der Syntax nicht zu stimmen.

    Mein Code:

    Visual Basic-Quellcode

    1. Const HKEY_LOCAL_MACHINE = &H80000002
    2. strComputer = "."
    3. Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
    4. strComputer & "\root\default:StdRegProv")
    5. strKeyPath = "SOFTWARE\Wow6432Node\InstallShield"
    6. objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
    7. 'For Each Subkey in arrSubKeys
    8. 'Wscript.Echo Subkey
    9. 'Next
    10. Dim version, substr
    11. version = Subkey
    12. "IswiAuto" + "version(substr = Mid(0, 10))" +".ISWiProject"
    13. Set Project = CreateObject("IswiAuto20.ISWiProject")
    14. if Wscript.Arguments.count > 0 Then
    15. strFile = WScript.Arguments.Item(0)
    16. else
    17. WScript.Echo "Die Datei wurde nicht gefunden, bitte wählen Sie eine Datei aus!"
    18. end if


    Weiß Jemand dort den Fehler?
    Habe es nun mit deinem Vorschlag versucht

    Er zeigt mir die Fehlermeldung an das ein Anweisungsende erwartet wird.
    In der Zeile "version = substr(Subkey, 0, 2)
    Wenn ich die Zeile daraufhin auskommentiere zeigt er mir weiterhin den Fehler an

    Visual Basic-Quellcode

    1. 'Methode Subkey wird ausgelesen
    2. Const HKEY_LOCAL_MACHINE = &H80000002
    3. strComputer = "."
    4. Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
    5. strComputer & "\root\default:StdRegProv")
    6. strKeyPath = "SOFTWARE\Wow6432Node\InstallShield"
    7. objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
    8. VersionString = "IswiAuto" & Mid(Version,1,10) & ".ISWiProject"
    9. 'For Each Subkey in arrSubKeys
    10. 'Wscript.Echo Subkey
    11. 'Next
    12. Dim version
    13. Dim Subkey As String
    14. version = substr(Subkey, 0, 2)
    15. Set Project = CreateObject("IswiAuto" & "VersionString" & ".ISWiProject")
    16. if Wscript.Arguments.count > 0 Then
    17. strFile = WScript.Arguments.Item(0)
    18. else
    19. WScript.Echo "Die Datei wurde nicht gefunden, bitte wählen Sie eine Datei aus!"
    20. end if

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