| |
 | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: VB6: Regedit in shell-Kommando klappt nicht (2305 mal gelesen)
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000
|
erstellt am: 24. Feb. 2009 13:42 <-- editieren / zitieren --> Unities abgeben:         
Hallo Experten, nach längerer Abstinzenz hab ich mal wieder ne Frage, dieses Mal zu VB6: Ich habe schon einige Zeit ein Programm, das verschiedene andere, frei definierbare Programme nach vorgegebenen Bedingungen ausführt. Damit werden bei uns nach der Anmeldung diverse Einstellungen etc. ausgeführt, die ich zentral verwalten kann. Die Programme werden dabei als String mit der Shell-Funktion ausgeführt: Result = Shell(tProgramm.Text, 1) Das funktioniert soweit auch ganz hervorragend. Jetzt will ich aber zentral dafür sorgen, dass bestimmte Registry-Einträge gesetzt werden. Die stehen in einer Reg-Datei und können z.B. durch doppelklick im Explorer problemlos importiert werden. Auch mit dem Befehl "regedit regdatei.reg" im CMD-Fenster klappt das problemlos. Wenn ich diesen Befehl aber mit meinem Programm absetze- passiert in der Registry nix. Der Befehl wird definitiv ausgeführt und es wird auch gemeldet, dass die Datei importiert wurde, aber es kommt nichts in der Registry an. Wir haben schon alle möglichen Berechtigungsstellen durchforstet, ohne Erfolg. Da das Programm ja aber eh mit den selben Berechitungen läuft, die der User hat, kanns daran ja eigentlich auch nicht liegen. Hat vielleicht jemand ne Idee? ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | Nasenheim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Ehrenmitglied Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2010, Rasterdesign MapGuide 6.5 - 2010 Oracle 9i,10g Enterprise autodesk Topobase 2-2010 VS6, VS.net 2010
|
erstellt am: 24. Feb. 2009 15:22 <-- editieren / zitieren --> Unities abgeben:          Nur für KMassler
Hallo Klaus, ich öffne bzw. führe externe Dateien/Programme mit einer API Funktion aus. Diese hat den Vorteil, das Dokumente mit dem von Windows vorgesehenden Programmen geöffnet werden und man auch die Kontrolle behält wie lange so ein Programm ausgeführt wird.
Code: ' für Shellx Private Declare Function CloseHandle Lib "kernel32" ( _ ByVal hObject As Long) As Long Private Declare Function GetExitCodeProcess Lib "kernel32" ( _ ByVal hProcess As Long, lpExitCode As Long) As Long Private Declare Function OpenProcess Lib "kernel32" ( _ ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As LongPublic Function ShellX( _ ByVal PathName As String, _ Optional ByVal WindowStyle As VbAppWinStyle = vbMinimizedFocus, _ Optional ByVal Events As Boolean = True _ ) As Long 'Deklarationen: Const STILL_ACTIVE = &H103& Const PROCESS_QUERY_INFORMATION = &H400& Dim ProcId As Long Dim ProcHnd As Long 'Prozess-Handle holen: ProcId = Shell(PathName, WindowStyle) ProcHnd = OpenProcess(PROCESS_QUERY_INFORMATION, True, ProcId) 'Auf Prozess-Ende warten: Do If Events Then DoEvents GetExitCodeProcess ProcHnd, ShellX Loop While ShellX = STILL_ACTIVE 'Aufräumen: CloseHandle ProcHnd End Function
Versuchs doch mal so.Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer

 Beiträge: 9808 Registriert: 01.12.2003 Alles zu Inventor - ADN Mitglied
|
erstellt am: 24. Feb. 2009 16:54 <-- editieren / zitieren --> Unities abgeben:          Nur für KMassler
Zussätzlich zu Wilfrieds hinweis hier noch Code: C:\Dokumente und Einstellungen\X>reg /? Konsolenregistrierungsprogramm für Windows - Version 3.0 Copyright (C) Microsoft Corp. 1981-2001. Alle Rechte vorbehalten REG Befehl [Parameterliste] Befehl [ QUERY | ADD | DELETE | COPY | SAVE | LOAD | UNLOAD | RESTORE | COMPARE | EXPORT | IMPORT ] Rückgabecode: (Mit Ausnahme von REG COMPARE) 0 - Erfolgreich 1 - Fehlgeschlagen Geben Sie Folgendes ein, um die Hilfe für einen Befehl anzuzeigen: REG Befehl /? Beispiele: REG QUERY /? REG ADD /? REG DELETE /? REG COPY /? REG SAVE /? REG RESTORE /? REG LOAD /? REG UNLOAD /? REG COMPARE /? REG EXPORT /? REG IMPORT /? C:\Dokumente und Einstellungen\X>
------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Ehrenmitglied Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2010, Rasterdesign MapGuide 6.5 - 2010 Oracle 9i,10g Enterprise autodesk Topobase 2-2010 VS6, VS.net 2010
|
erstellt am: 24. Feb. 2009 19:05 <-- editieren / zitieren --> Unities abgeben:          Nur für KMassler
Hallo Klaus, hab im Eifer des Gefechtes das falsche rausgelöscht. Code: Private Declare Function ShellExecute Lib "Shell32.dll" _ Alias "ShellExecuteA" (ByVal hWnd As Long, _ ByVal lpOperation As String, ByVal lpFile As String, _ ByVal lpParameters As String, ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As LongPublic Function openDoc(ByVal Document As String) As Long openX = ShellExecute(0&, vbNullString, Document, vbNullString, vbNullString, vbMaximizedFocus) End Function
Beipiel wäre
Code: openDoc "http://ww3.cad.de/cgi-bin/ubb/forumdisplay.cgi?action=topics&number=110" oder openDoc "C:\Temp\testreg.reg"
Wilfried Stelberg------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000
|
erstellt am: 25. Feb. 2009 08:22 <-- editieren / zitieren --> Unities abgeben:         
Danke erst mal. @Stelli: Wenn ich das richtig interprätiere, wartet dein Programm dann, bis der Prozess beendet ist, stimmt das? Das will ich nämlich auf keinen Fall! Das entsprechende Programm soll einfach ablaufen, wie wenn es im Explorer gestartet worden wäre. CAD-Huebner: Das ist mir schon bekannt, das funktioniert genauso gut oder nicht gut, wie regedit "Dateiname.reg", ist also leider keine Lösung. Gruß und Dank fürs Kopfzerbrechen! Klaus ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | Nasenheim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Ehrenmitglied Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2010, Rasterdesign MapGuide 6.5 - 2010 Oracle 9i,10g Enterprise autodesk Topobase 2-2010 VS6, VS.net 2010
|
erstellt am: 25. Feb. 2009 11:07 <-- editieren / zitieren --> Unities abgeben:          Nur für KMassler
Hallo Klaus, im ersten Beispiel (Start eines externen Programmes) kannst du als Parameter mitgeben ob du auf das Ausführungsende warten willst oder nicht. Ich brauchs z.B. um per Batch SQL Loader Dateien einzulesen. Wenn der Vorgang beendet ist durchsuche ich den Ordner nach Fehlerdateien. Im zweiten Beispiel (Öffnen eienes Dokumentes) läuft der Code weiter. Ich habs mal mit einer Reg Datei probiert und es klappt. Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000
|
erstellt am: 26. Feb. 2009 08:11 <-- editieren / zitieren --> Unities abgeben:         
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ privat: ab 2024 Onshape seit 2025 SolidWorks for Makers
|
erstellt am: 26. Feb. 2009 10:36 <-- editieren / zitieren --> Unities abgeben:         
Bin gerade am Einbauen und Probieren.. Kannst du mir sagen, welche Werte ShellX in welchem Fall übergibt? Wie weiß ich, ob das Programm ausgeführt wurde? Beim einfachen Shell brauch ich nur unterscheiden zwischen 0 und >0 ------------------ Klaus PS: Ich habs jetzt eingebaut und getestet. Dein Code ist ok, aber auf 64bit-Maschinen wird die Reg-Datei trotzdem nicht importiert.
www.al-ko.com | mein Gästebuch | privat... | Nasenheim [Diese Nachricht wurde von KMassler am 26. Feb. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Ehrenmitglied Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2010, Rasterdesign MapGuide 6.5 - 2010 Oracle 9i,10g Enterprise autodesk Topobase 2-2010 VS6, VS.net 2010
|
erstellt am: 26. Feb. 2009 15:53 <-- editieren / zitieren --> Unities abgeben:          Nur für KMassler
|
Stelli1 Ehrenmitglied Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2010, Rasterdesign MapGuide 6.5 - 2010 Oracle 9i,10g Enterprise autodesk Topobase 2-2010 VS6, VS.net 2010
|
erstellt am: 27. Feb. 2009 11:52 <-- editieren / zitieren --> Unities abgeben:          Nur für KMassler
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000
|
erstellt am: 02. Mrz. 2009 11:11 <-- editieren / zitieren --> Unities abgeben:         
Danke für die Info, sowas ähnliches habe ich auch schon vermutet (ODBC ist auch so ein Problem-Thema, da geht's mit der speziellen 32bit-Version). Ich habe alle regedit.exe und regedt32.exe durchprobiert- ohne Erfolg. Ich hab das Problem jetzt von hinten durch die Brust ins Auge umschifft: Im ersten Durchgang wird eine .cmd-Datei in den lokalen autostart-Ordner kopiert. In der cmd-Datei werden die Registry-Einstellungen gesetzt. Bei der nächsten Anmeldung wird die ausgeführt- ohne mein Programm- und fertig. Naja... Ciao Klaus ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | Nasenheim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |