Top-Themen

Aktuelle Themen (A bis Z)

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...

Mitglied: 23442

23442 (Level 1)

13.11.2006, aktualisiert 11.12.2006, 7515 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 ..
Ähnliche Inhalte
C und C++

Manifeste für DLLs nachträglich erstellen Stand Visual Studio 6 und VB6

Frage von GrueneSosseMitSpeckC und C++2 Kommentare

Hi, ich hab da mal ne Frage - wir haben eine Applikation, die Side by side als auch registrierte ...

Neue Wissensbeiträge
Humor (lol)
Administrator.de Perlen
Tipp von DerWindowsFreak2 vor 2 TagenHumor (lol)3 Kommentare

Hallo, Heute beim stöbern auf dieser Seite bin auf folgenden Thread aus dem Jahre 2006 gestossen: Was meint ihr? ...

Erkennung und -Abwehr
OpenSSH-Backdoor Malware erkennen
Tipp von Frank vor 3 TagenErkennung und -Abwehr

Sicherheitsforscher von Eset haben 21 Malware-Familien untersucht. Die Malware soll Hintertüren via OpenSSH bereitstellen, so dass Angreifer Fernzugriff auf ...

iOS
WatchChat für Whatsapp
Tipp von Criemo vor 6 TageniOS5 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor!
Tipp von Criemo vor 7 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
PCIe 1.0 Grafikkarte für 3840x2160
Frage von Windows10GegnerGrafikkarten & Monitore30 Kommentare

Hallo, mein Vater hat einen neuen Monitor gekauft, welcher eine native Auflösung von 3840*2160 hat. Diese muss jetzt auch ...

Windows Server
Dienstnamen und oder Deutsche und Englische Beschreibung in services.msc gleichzeitig anzeigen
gelöst Frage von vafk18Windows Server23 Kommentare

Guten Morgen, die Suche nach Diensten in services.msc gestaltet sich immer wieder schwierig, weil mir je nach Aufgabe die ...

Windows 10
Windows Enterprise 1809 Eval nicht bootbar
Frage von Sunny89Windows 1022 Kommentare

Hallo zusammen, bevor ich mich jetzt noch stundenlang rumärger wollte ich euch fragen, ob Ihr die gleichen Probleme habt ...

JavaScript
Javascript: WebSql
gelöst Frage von internet2107JavaScript13 Kommentare

Guten Morgen zusammen, zunächst einmal einen schönen dritten Advent. Ich habe ein Problem mit Javascript und WebSQL. Bisher habe ...