Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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?

Geschrieben

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.

Geschrieben

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

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

Geschrieben

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 ;)

Geschrieben

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 ;)

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...