Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Parameter mit VB6 übergeben...

Frage Entwicklung VB for Applications

Mitglied: 23442

23442 (Level 1)

13.11.2006, aktualisiert 11.12.2006, 7113 Aufrufe, 11 Kommentare

...mit dem Shell Befehl

Hallo,

wie kann ich in Visual Basic eine Datei mit Parameter aufrufen? Ich habe folgende Situation:

regedit.cmd > Hinter der Datei soll ein Pfad übergeben werden, den die Datei verarbeitet
Trouble.exe > Hier wird die regedit.cmd aufgerufen

Mein bisheriger Aufruf der .cmd Datei sieht so aus:
Shell (App.Path & "\regedit.cmd")

Das funktioniert auch, aber wenn ich den Parameter hinzufüge:
Shell (App.Path & "\regedit.cmd c:\Windows")

ruft er mir die Datei nicht mehr auf... Wenn ich aber in der Konsole
regedit.cmd c:\Windows

eingebe, dann funktioniert es!!

Wie muss also der Befehl in Visual Basic 6 heißen?
Mitglied: wakko
13.11.2006 um 18:10 Uhr
Moin

okay, erstmal die ShellandWait-Funktion:
01.
Option Explicit 
02.
Private Type STARTUPINFO 
03.
cb As Long 
04.
lpReserved As String 
05.
lpDesktop As String 
06.
lpTitle As String 
07.
dwX As Long 
08.
dwY As Long 
09.
dwXSize As Long 
10.
dwYSize As Long 
11.
dwXCountChars As Long 
12.
dwYCountChars As Long 
13.
dwFillAttribute As Long 
14.
dwFlags As Long 
15.
wShowWindow As Integer 
16.
cbReserved2 As Integer 
17.
lpReserved2 As Long 
18.
hStdInput As Long 
19.
hStdOutput As Long 
20.
hStdError As Long 
21.
End Type 
22.
 
23.
Private Type PROCESS_INFORMATION 
24.
hProcess As Long 
25.
hThread As Long 
26.
dwProcessID As Long 
27.
dwThreadID As Long 
28.
End Type 
29.
 
30.
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _ 
31.
ByVal dwMilliseconds As Long) As Long 
32.
Private Const INFINITE = -1& 
33.
 
34.
Private Declare Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName As Long, _ 
35.
ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, _ 
36.
ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, _ 
37.
ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, _ 
38.
ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, _ 
39.
lpProcessInformation As PROCESS_INFORMATION) As Long 
40.
Private Const NORMAL_PRIORITY_CLASS = &H20& 
41.
 
42.
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long 
43.
 
44.
 
45.
Sub ShellAndWait(ByVal Filename As String) 
46.
Dim RetVal As Long 
47.
Dim proc As PROCESS_INFORMATION 
48.
Dim StartInf As STARTUPINFO 
49.
 
50.
StartInf.cb = Len(StartInf) 
51.
 
52.
'Angegebenes Programm starten 
53.
RetVal = CreateProcessA(0&, Filename, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, StartInf, proc) 
54.
 
55.
'Das eigene Programm anhalten, bis das fremde beendet wurde 
56.
RetVal = WaitForSingleObject(proc.hProcess, INFINITE) 
57.
RetVal = CloseHandle(proc.hProcess) 
58.
End Sub
Aufruf dann so:
01.
ShellAndWait "cmd.exe /c c:\windows\system32\regedit.cmd c:\Windows"
(oder so ähnlich)
Hoffe das hilft, habe so einen Aufruf nur in einem Uralt-Script...
Gruß,
Henrik
Bitte warten ..
Mitglied: Biber
13.11.2006 um 19:00 Uhr
@wakko

Im Prinzip ja, aber...

....wenn es nur für eine einmalige Aktion gebraucht wird, wäre das kleinere Übel (vom Tippaufwand her):
01.
Shell Environ$("COMSPEC") & " /c x:\mypfad\regedit.cmd c:\windows"
@23442
Intern wird in der Tat, wenn Shell() oder ShellExec() aufgerufen werden, "ein Prozess gestartet" - sprich: die CreateProcessA() aus der kernel32.dll aufgerufen.
Aber der Klemmer war ein anderer: Du hast ja keine "allein" ausführbare Datei aufgerufen, sondern eine Datei mit der Extension "*.cmd".
In den unergründlichen Tiefen der Registry steht natürlich irgendwo, dass zum Interpretieren dieser Datei(endung) der Befehlsinterpreter command.com oder CMD.exe benötigt wird.
Aber dieses implizite Starten einer Anwendung über den Aufruf einer bestimmten Extension klappt eben nur bei ShellExec().

Wenn Du Shell() aufrufst, musst/solltest Du auch explizit den aktuellen Command-Interpreter aufrufen.
Und der steht in der Umgebungsvariablen %COMSPEC%.

Gruß
Biber
[Edit] P.S.
IMHO ist in der "Type STARTUPINFO" die Deklaration von lpReserved2 nicht "long", sondern:
lpReserved2 As Byte
[/Edit]
Bitte warten ..
Mitglied: 16568
13.11.2006 um 19:38 Uhr
Ich habe mir mal aus Gründen der Übersichtlichkeit erlaubt, ein paar Unterstriche an den nötigen Stellen einzufügen...
(sonst wird das Code-Element im Browser zu lange ausgegeben...)


Lonesome Walker
Bitte warten ..
Mitglied: Biber
13.11.2006 um 20:12 Uhr
@LSW
Ich habe mir mal aus Gründen der Übersichtlichkeit erlaubt,...
Guuuuuuuuter Mod..*tätschel*

Herzlichen Glückwünsch noch mal vom mir!!!!!!!
Und bleib so flauschig

Biber
Bitte warten ..
Mitglied: 16568
13.11.2006 um 22:31 Uhr
Ich geb' mein Bestes *rotwerd*


Lonesome Walker
Bitte warten ..
Mitglied: 23442
14.11.2006 um 08:15 Uhr
Erstmal: Hallo neuer Mod und viel Spaß mit so lästigen Usern wie mir ;-P

Lästig deshalb, weil das ganze nicht funktioniert... Ich sehe zwar bei beiden Versionen (auch mir "lpReserved2 As Byte") kurz ein schwarzes Komandozeilenfenster, das aber geich wieder verschwindet (so nach ner halben Sekunde). Wenn ich den Parameter (in unserem Fall das c:\Windows) weglasse, hab ich immernoch das selbe Problem...

Außerdem funktioniert das aufrufen der .cmd Datei ja, aber nur solange ich keinen Parameter (also wieder das c:\Windows) hinzufüge mit dem "normalen" Shell() Aufruf...
Bitte warten ..
Mitglied: 16568
14.11.2006 um 11:26 Uhr
Moinmoin chicken ^^

och, lästig wirst Du erst, wenn wir Dir antworten, Du es aber nicht verstehst...
(somit bist Du noch weit davon entfernt, uns zu nerven )

Fragen wir mal anders rum:

In VB gibt es zig Möglichkeiten, ein Problem zu lösen.
Was willst Du mit dem Shell-Aufruf erreichen?
Einträge in die Registry schreiben?
Das macht man anders. Außerdem geht dann ja immer so ein Shell-Fenster auf, sieht unschön aus.

Wie schreibe ich Werte in die Registry:

http://www.activevb.de/cgi-bin/suche/search.pl

Hier als Suchbegriff "Registry eingeben, noch die Felder FAQ, Tutorials, Projekte, Klassen, Tipps anhaken, auf Suche, fertig.

Besser, direkt in die Registry schreiben, geht auch schneller, und man kriegt keine häßliche Abfrage mehr zu sehen.


Lonesome Walker
PS: Ich könnte hier ja auch ein Tutorial über VB und Registry schreiben; aber wozu das Rad neu erfinden
Bitte warten ..
Mitglied: 23442
15.11.2006 um 13:32 Uhr
Hallo,

ja, ich möchte was in die Registry schreiben, allerdings nicht in die des aktuellen Systems! Das ganze wird von Windows PE (startet von CD) gestartet und muss nicht auf die HDD zugreifen. Wenn es dir weiterhilft, hier der Inhalt der .cmd Datei:

@echo off
set ROOTPATH=%1
reg load HKLM\LocalSys %ROOTPATH%\System32\config\system
reg import mergeide.reg
reg unload HKLM\LocalSys


Rootpath ist in dem Fall das c:\Windows, welches übergeben wird. in der Datei mergeide.reg stehen dann die Schlüssel, Werte etc.
Bitte warten ..
Mitglied: 23442
23.11.2006 um 09:24 Uhr
Keiner ne Ahnung?
Bitte warten ..
Mitglied: 16568
23.11.2006 um 17:42 Uhr
Wie Du schon sagtest, etwas komplizierter, aber ich denke, Du solltest simultan hierzu auch mal einen Thread im BartsPE-Forum starten...

Ich grübel ja schon nebenbei, vielleicht macht's ja noch mal klick, denn besser wäre es, das ganze per VBS in die Registry zu patchen...


Lonesome Walker
Bitte warten ..
Mitglied: 23442
11.12.2006 um 09:21 Uhr
Ah, im ActiveVB Forum hatte wer ne Lösung parat:

Ich hab einfach die Zeilen aus der .cmd Datei in einen Shell Befehl im VB Program eingebaut:

Shell "reg load HKLM\LocalSys " & winpfad & "\System32\config\system"
Shell "reg import " & App.path & "\" & arbeitsordner & "\mergeide.reg"
Shell "reg unload HKLM\LocalSys"

thx @ all für die Hilfe
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows Server
gelöst Eventlog gesperrtes Konto, Konto als Parameter übergeben (10)

Frage von pablovic zum Thema Windows Server ...

Batch & Shell
Text-Datei auslesen und Inhalt als Parameter übergeben (1)

Frage von aubm2013 zum Thema Batch & Shell ...

Batch & Shell
gelöst New-ADUser (optional Parameter) (13)

Frage von mc-doubleyou zum Thema Batch & Shell ...

Windows Update
Package Publisher - Copy has failed falscher Parameter

Frage von Belloci zum Thema Windows Update ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...