Hot News:

Unser Angebot:

  Foren auf CAD.de
  VBasic / vb.net / vbs / wsh
  VB6: Regedit in shell-Kommando klappt nicht

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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.



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2678
Registriert: 06.11.2000

erstellt am: 24. Feb. 2009 13:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

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 Long

Public 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



Sehen Sie sich das Profil von CAD-Huebner an!   Senden Sie eine Private Message an CAD-Huebner  Schreiben Sie einen Gästebucheintrag für CAD-Huebner

Beiträge: 9808
Registriert: 01.12.2003

Alles zu Inventor - ADN Mitglied

erstellt am: 24. Feb. 2009 16:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

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 Long

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



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2678
Registriert: 06.11.2000

erstellt am: 25. Feb. 2009 08:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

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.



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2678
Registriert: 06.11.2000

erstellt am: 26. Feb. 2009 08:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich habs in der Zwischenzeit nochmal mit verschiedenen Usern auf verschiedenen Rechnern probiert- und festgestellt, dass das Problem nur auf 64bit-Maschinen auftritt!

So ein Mist.

Hast du deinen Code zufällig auch schon unter XP64bit getestet?

Ciao
Klaus

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

KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles... i.R.



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

Hallo Klaus,

hab leider kein 64bit. Gibt es da vielleicht wie bei 32bit ein regedt32.exe eine regedt64.exe die man da bemühen muss ?

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

Stelli1
Ehrenmitglied
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

Hallo Klaus,

schau doch mal hier.

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.



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2678
Registriert: 06.11.2000

erstellt am: 02. Mrz. 2009 11:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz