Guybrush Threepwood Geschrieben 30. Juni 2006 Geschrieben 30. Juni 2006 In einem OCX das ich geschrieben haben verwende ich in der DLLRegisterServer Funktion RegOverridePredefKey um einen Schlüssel in der Registry umzukopieren: hLib = LoadLibrary("Advapi32.dll"); if (hLib) { pRegOverridePredefKey = (TRegOverridePredefKey) GetProcAddress(hLib,"RegOverridePredefKey"); if (pRegOverridePredefKey) { RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Classes"), 0, KEY_ALL_ACCESS, &hKeyCurrentUser); pRegOverridePredefKey(HKEY_CLASSES_ROOT, hKeyCurrentUser); RegCloseKey(hKeyCurrentUser); } FreeLibrary(hLib); } [/PHP] In einem anderem Programm wird diese Registrierungsfunktion jetzt aufgerufen und an einer späteren Stelle ShellExecute um ein Programm zu starten. Dieser Aufruf von ShellExecute funktioniert aber solange nicht wie RegOverridePredefKey vorher aufgerufen wird. Entferne ich den Aufruf dann klappt auch ShellExecute :confused: Dabei ist es egal was ich per ShellExecute starten will, selbst c:\windows\notepad.exe funktioniert hinterher nicht mehr. Hat jemand eine Idee woran das liegen könnte? Zitieren
Klotzkopp Geschrieben 30. Juni 2006 Geschrieben 30. Juni 2006 Was genau heißt denn "funktioniert nicht"? Zitieren
Guybrush Threepwood Geschrieben 30. Juni 2006 Autor Geschrieben 30. Juni 2006 Das Programm wird nicht aufgerufen und ShellExecute gibt 31 zurück. Zitieren
Klotzkopp Geschrieben 30. Juni 2006 Geschrieben 30. Juni 2006 31 ist SE_ERR_NOASSOC. ShellExecute weiß also nicht, wie es .exe-Dateien ausführen soll. Das ist die Folge davon, dass du HKEY_CLASSES_ROOT umgehängt hast, denn da steht das drin. In HKCU\Software\Classes steht es nicht. Zitieren
Guybrush Threepwood Geschrieben 30. Juni 2006 Autor Geschrieben 30. Juni 2006 Versteh ich jetzt nicht so ganz. Soweit ich RegOverridePredefKey verstanden habe kopiert der lediglich einen Schlüssel sammt Unterschlüsseln woanders hin. Oder sagt die Funktion Windows auch das es nicht mehr in HKEY_CLASSES_ROOT sondern in HKCU\Software\Classes gucken soll? Dann fände ich es aber komisch das wenn ich mein Programm beende und wieder starte ohne den Aufruf von RegOverridePredefKey, ShellExecute wieder klappt... Zitieren
Bubble Geschrieben 30. Juni 2006 Geschrieben 30. Juni 2006 Versteh ich jetzt nicht so ganz. Soweit ich RegOverridePredefKey verstanden habe kopiert der lediglich einen Schlüssel sammt Unterschlüsseln woanders hin. Das ist falsch, es wird nichts kopiert, sondern nur eine Abbildungen angelegt, mit der Änderungen an einem Teil der Registry abgefangen werden können. Lies Dir den Anmerkungs-Teil der Doku zu der Funktion noch einmal durch. Zitieren
Klotzkopp Geschrieben 30. Juni 2006 Geschrieben 30. Juni 2006 Stellt sich die Frage, was damit ursprünglich erreicht werden sollte. Du wolltest ja wohl kaum den kompletten Inhalt von HCR nach HKCU\Software\Classes kopieren, oder? Zitieren
Guybrush Threepwood Geschrieben 30. Juni 2006 Autor Geschrieben 30. Juni 2006 Den Tipp hatte ich vor einiger Zeit per google irgendwo gefunden, damit lässt sich das ActiveX Steuerelement auch registrieren wenn man keine Admin Rechte hat, bzw wird der entsprechende Eintrag in der Registry dann unter HKCU erstellt wo man drauf zugreifen kann. Wie das allerding genau funktioniert weiß ich nicht Zitieren
Guybrush Threepwood Geschrieben 2. Juli 2006 Autor Geschrieben 2. Juli 2006 So hab mir das alles nochmal genau angeguckt und denke jetzt habe ich verstanden wie das funktioniert. RegOverridePredefKey sagt dem aktuellem Prozess das er nicht mehr unter HKEY_CLASSES_ROOT gucken soll sondern unter HKEY_CURRENT_USER\Software\Classes. Weil der aktuelle Benutzer da ja immer Schreibrechte hat kann sich das OCX da auch registrieren wenn man kein Admin ist. Da aber meine Anwendung jetzt immer da rein guckt anstatt in HCR fehlen ja die ganzen Informationen aus HCR. Also muss ich, sobald ich das OCX nicht mehr brauche das wieder zurück setzen (oder mal ausprobieren ob ich es direkt nach der Registration zurücksetzten kann und er es trotzdem auch unter HCU findet). Ein Glück das das nur für den aktuellen Prozess und nicht Systemweit ist Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.