stinson300
Goto Top

Programm per Batchdatei starten und Parameter übergeben und mit Visual Basic auslesen

Hallo miteinander,

Ich habe ein Problem mit meinem Programm.

Ich habe ein Programm mit Visual Basic geschrieben das ein Add-In bei uns deaktiviert oder umgekehrt.

Ich will jetzt aber dieses Programm mit einer Batchdatei starten und gerade auch noch einen Parameter übergeben.

zB. a für aktivieren und d für deaktivieren

Ich bin aber ein Anfänger mit Visual Basic, deshalb wollte ich euch fragen, wie ich diesen Parameter abfragen kann?

Gruss

Stefan

Danke für eure Antworten im voraus.

Content-ID: 205908

Url: https://administrator.de/contentid/205908

Ausgedruckt am: 19.11.2024 um 12:11 Uhr

MrTrebron
MrTrebron 01.05.2013 um 14:00:26 Uhr
Goto Top
stinson300
stinson300 01.05.2013 um 14:23:08 Uhr
Goto Top
Danke für deine Antwort.

Nein es ist nicht kaputt. Ich habe einfach nichts gefunden.

Gruss

Stefan
stinson300
stinson300 01.05.2013 um 15:44:12 Uhr
Goto Top
Danke funktioniert aber nicht
MrTrebron
MrTrebron 01.05.2013 um 17:21:35 Uhr
Goto Top
Hi,

vorhin am Smartphone gar nicht gesehen, du hast das hier bei VBA gepostet.
Welche VB nutzt du denn genau?

Gruß
Norbert
stinson300
stinson300 01.05.2013 um 17:35:14 Uhr
Goto Top
Die neuste,
ich programmiere mit visual studio 2012
MrTrebron
MrTrebron 01.05.2013 um 17:37:40 Uhr
Goto Top
stinson300
stinson300 02.05.2013 um 08:27:43 Uhr
Goto Top
Ich habe jetzt einmal ein Testprojekt gemacht.

Wie muss ich das jetzt eingeben in der Kommandozeile und wo wird der Wert hineingeschrieben?
MrTrebron
MrTrebron 02.05.2013 um 08:43:31 Uhr
Goto Top
Hi,

also das Beispiel aus meinem ersten Link (dotnetsnippets) funktioniert bei mir hervorragend.

Du rufst in deiner Batch ganz normal die Exe deines Programms auf und übergibst deine(n) Parameter

Programm.exe aktivieren
Programm.exe deaktivieren
Programm.exe debug

Den Parameter musst du dir dann selbst in eine Variable schreiben oder je nach Parameter die Sub oder Funktion in deinem Programm starten.

Gruß
Norbert
stinson300
stinson300 02.05.2013 um 13:54:05 Uhr
Goto Top
Wie muss ich den das bei meinem Programm machen ich schicke euch mal den Quellcode

Imports Microsoft.Win32
Imports System

Module DMS_Integration_deaktivieren

Private Property objShell As Object

Sub Main()
Dim WshShell
Dim OsType
Dim objFSO
Dim fso
Dim createfolder
Dim ESO
Dim Antwort As Char
Dim p As Process
ESO = CreateObject("Scripting.FileSystemObject")
objFSO = CreateObject("Scripting.FileSystemObject")
WshShell = CreateObject("WScript.Shell")
objShell = CreateObject("wscript.shell")
fso = CreateObject("Scripting.filesystemobject")

OsType = WshShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE") ' Liest den Registry-Wert aus der die Architektur (x86 oder x64) definiert

For Each p In Diagnostics.Process.GetProcesses()
If p.ProcessName = "excel" Then
Console.WriteLine("Excel ist momentan gestartet bitte beenden sie ihr Excel-Programm")
GoTo LastLine
End If
Next

' Parameter auslesen

' Parameter benutzen

' Wenn er auf a ist dann aktiveren

Line5:
If objFSO.FileExists("C:\Program Files\Microsoft Office\Office12\XLSTART\DMintegration.xlam") Then
Console.WriteLine("Die Integration ist schon aktiviert und kann deshalb nicht akiviert werden")
Line0:
Console.WriteLine("Wollen sie es deaktivieren? (y/n)")
Antwort = CChar(CStr(Console.Read()))
If Antwort = "y" Then
GoTo Line1
ElseIf Antwort = "n" Then
GoTo LastLine
Else
Console.WriteLine("Geben Sie bitte für Ja y ein und für Nein n")
GoTo Line0
End If

End If

If OsType = "x86" Then ' Wenn er 32bit ist dann mach das


' Datei wieder ans richtige Ort verschieben
objFSO.MoveFile("C:\Program Files\Microsoft Office\Office12\XLSTART\Deaktiviert\DMintegration.xlam", "C:\Program Files\Microsoft Office\Office12\XLSTART\DMintegration.xlam")

' Jetzt setzt er den Registry-Eintrag auf 3, das bedeutet aktiviert
objShell.regwrite("HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Addins\DMintegration_NET.Connect\LoadBehavior", "00000003", "REG_DWORD")

' "Deaktiviert" Ordner wieder löschen
ESO.DeleteFolder("C:\Program Files\Microsoft Office\Office12\XLSTART\Deaktiviert")


ElseIf OsType = "AMD64" Then ' wenn er 64 ist dann mach das

' Datei wieder ans richtige Ort verschieben
objFSO.MoveFile("C:\Program Files (x86)\Microsoft Office\Office12\XLSTART\Deaktiviert\DMintegration.xlam", "C:\Program Files (x86)\Microsoft Office\Office12\XLSTART\DMintegration.xlam")

' Jetzt setzt er den Registry-Eintrag auf 3, das bedeutet aktiviert
objShell.regwrite("HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Addins\DMintegration_NET.Connect\LoadBehavior", "00000003", "REG_DWORD")

' "Deaktiviert" Ordner wieder löschen
ESO.DeleteFolder("C:\Program Files (x86)\Microsoft Office\Office12\XLSTART\Deaktiviert")


End If

' Wenn er auf d ist dann deaktivieren
Line1:
If objFSO.FileExists("C:\Program Files\Microsoft Office\Office12\XLSTART\Deaktiviert\DMintegration.xlam") Then
Console.WriteLine("Die Integration ist schon deaktiviert und kann deshalb nicht deakiviert werden")
Line2:
Console.WriteLine("Wollen sie es aktivieren? (y/n)")
Antwort = Console.Read()
If Antwort = "y" Then
GoTo Line5
ElseIf Antwort = "n" Then
GoTo LastLine
Else
Console.WriteLine("Geben Sie bitte für Ja y ein und für Nein n")
GoTo Line2
End If

End If

If OsType = "x86" Then ' Wenn er 32bit ist dann mach das

If objFSO.FileExists("C:\Program Files\Microsoft Office\Office12\XLSTART\Deaktiviert\DMintegration.xlam") Then
Console.WriteLine("Die Integration ist schon deaktiviert und kann deshalb nicht deakiviert werden")
End If

' Ordner für die Verschiebung erstellen
createfolder = fso.CreateFolder("C:\Program Files\Microsoft Office\Office12\XLSTART\Deaktiviert")

' Verschiebung der Datei
objFSO.MoveFile("C:\Program Files\Microsoft Office\Office12\XLSTART\DMintegration.xlam", "C:\Program Files\Microsoft Office\Office12\XLSTART\Deaktiviert\DMintegration.xlam")

' Jetzt setzt er den Registry-Eintrag auf 8, das bedeutet deaktiviert
objShell.regwrite("HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Addins\DMintegration_NET.Connect\LoadBehavior", "00000008", "REG_DWORD")

ElseIf OsType = "AMD64" Then ' wenn er 64 ist dann mach das

If objFSO.FileExists("C:\Program Files (X86)\Microsoft Office\Office12\XLSTART\Deaktiviert\DMintegration.xlam") Then
Console.WriteLine("Die Integration ist schon deaktiviert und kann deshalb nicht deakiviert werden")
End If

' Ordner für die Verschiebung erstellen
createfolder = fso.CreateFolder("C:\Program Files (x86)\Microsoft Office\Office12\XLSTART\Deaktiviert")
' Verschiebung der Datei
objFSO.MoveFile("C:\Program Files (x86)\Microsoft Office\Office12\XLSTART\DMintegration.xlam", "C:\Program Files (x86)\Microsoft Office\Office12\XLSTART\Deaktiviert\DMintegration.xlam")

' Jetzt setzt er den Registry-Eintrag auf 8, das bedeutet deaktiviert
objShell.regwrite("HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Addins\DMintegration_NET.Connect\LoadBehavior", "00000008", "REG_DWORD")

End If
LastLine:
End Sub
End Module
MrTrebron
MrTrebron 02.05.2013 um 15:03:06 Uhr
Goto Top
Hi,

das ist ja eher VBScript als VB.net.
Goto *kopfschuettel

Hier mal ein kleines Konstrukt:
Imports Microsoft.Win32
Imports System


Module Module1
    Public OSVersion As Boolean = Environment.Is64BitOperatingSystem 'If true then 64 bit  
    Public args() As String = Environment.GetCommandLineArgs

    Sub Main()
        Dim p As Process

        For Each p In Diagnostics.Process.GetProcesses()
            If p.ProcessName = "excel" Then  
                Console.WriteLine("Excel ist momentan gestartet bitte beenden sie ihr Excel-Programm")  
                Exit Sub
            End If
        Next

        If args.GetUpperBound(0) = 0 Then
            Console.WriteLine("Kein Parameter übergeben")  
            Exit Sub
        End If
        Select Case args(1)
            Case "A"  
                'Do Something to activate  
            Case "D"  
                'Do something to deactivate  
            Case Else
                Console.WriteLine("Parameter " & args(1) & " unbekannt")  
                Exit Sub
        End Select

    End Sub

End Module

Quick 'n' dirty
Gruß
Norbert
stinson300
stinson300 02.05.2013 um 15:09:21 Uhr
Goto Top
Habe es jetzt selber herausgefunden, wie es geht aber danke für die Antwort