Trotz Adminrechte des Programms keine Zugriffsrechte auf registry ?
-
Trotz Adminrechte des Programms keine Zugriffsrechte auf registry ?
Das sagt glaub ich fast alles.
Der Zugriff schlägt auf einem Windows 7 system (lesend) immer fehl.
Selbst mit "Als Admin ausführen". muss ich in dem ganzen noch nach rechten Nachfragen, oder gibt es gar differenzen in der Struktur. Abgesehen vom WOW6432Node
-
Dein Beitrag ist wenig aussagekräftig.
Ein markanter Code-Ausschnitt und eine genauere Beschreibung, was/wo dein Programm konkret lesen soll, würden sicher eher zu ggf. hilfreichen Antworten führen.
-
if(ReadfromRegistry("HKEY_LOCAL_MACHINE","Software\\HERE_IS_A_SUBKEY","UninstallPath") != "NONEXISTENT")String ReadfromRegistry(String RegistryDrive, String RegistryPath, String Key) { HKEY hKey; if (RegistryDrive == "HKEY_CLASSES_ROOT") { hKey = HKEY_CLASSES_ROOT; } else if (RegistryDrive == "HKEY_CURRENT_USER") { hKey = HKEY_CURRENT_USER; } else if (RegistryDrive == "HKEY_LOCAL_MACHINE") { hKey = HKEY_LOCAL_MACHINE; } else if (RegistryDrive == "HKEY_USERS") { hKey = HKEY_USERS; } else if (RegistryDrive == "HKEY_CURRENT_CONFIG") { hKey = HKEY_CURRENT_CONFIG; } HKEY rHandle; char Cstr[256]; if (RegOpenKeyEx(hKey, RegistryPath.c_str(), NULL, KEY_ALL_ACCESS, &rHandle) != ERROR_SUCCESS) { return "NONEXISTENT"; } unsigned long Longer = 256; int suc = RegQueryValueEx(rHandle, Key.c_str(), NULL, NULL, Cstr, &Longer); RegCloseKey(hKey); if (suc != ERROR_SUCCESS) { return "NONEXISTENT"; } return (String(const_cast <const char* >(Cstr))); }Ich weiß, der erste tipp ist, dass ich TRegistry benutzen soll

EDIT: Aber TRegistry macht ja nicht viel anderes, hat das noch sonst spezielle Sicherheitsattribute ?
-
Wohl eher nicht.
Da du dich vor WinAPI ja offenbar nicht fürchtest, verschiebe ich mal dahin.
I.d.R. gibt's da mehr KnowHow zu den verpfriemelsten Windows-Absonderlichkeiten.
Nachtrag: Ich glaube, mich zu erinnern, dass man der Exe eine speziell präparierte Manifest-Datei mitgeben muss. Benutze dzu mal die Suchfunktion hier in WinAPI.
-
Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL (C++ Builder) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
exestiert den der Key überhaupt?
-
Wenn du nur lesen willst, warum öffnest du den Schlüssel mit ALL_ACCESS? Öffne ihn nur zum Lesen, dann brauchst du auch keine Adminstratorenrechte.
-
wie unten aufgeführt funktioniert es bei mir. vieleicht hilft dir das ja.
cp:
DWORD EXPORT QueryStrValueEx(HKEY hMasterKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, LPCTSTR lpReturnValue) { HKEY hKey; DWORD dwType=REG_NONE; BYTE Data[1024]=""; DWORD dwDataSize=sizeof(Data); RegOpenKey(hMasterKey, lpSubKey, &hKey); LONG Result = RegQueryValueEx(hKey, lpValueName, 0, &dwType, (BYTE*) lpReturnValue, &dwDataSize); RegCloseKey(hKey); return dwDataSize; }
-
Ja, so ist unser liebes Win7 x...das mit dem Manifest ist schon ein guter Tipp. Viele meiner super-tuber-Programme laufen auch nicht mehr unter Win7, trotz Administrator-Rechte

-
Dann waren sie wohl nicht so ganz "super-tuber".

-
Otto schrieb:
Ja, so ist unser liebes Win7 x...das mit dem Manifest ist schon ein guter Tipp. Viele meiner super-tuber-Programme laufen auch nicht mehr unter Win7, trotz Administrator-Rechte

Dann liefen die aber auch schon nicht unter Vista und ich weiß nicht was daran super ist

-
_Luckie schrieb:
Wenn du nur lesen willst, warum öffnest du den Schlüssel mit ALL_ACCESS? Öffne ihn nur zum Lesen, dann brauchst du auch keine Adminstratorenrechte.
Ups...
-
Martin Richter schrieb:
Dann liefen die aber auch schon nicht unter Vista und ich weiß nicht was daran super ist

Und unter XP und unter 2000 und unter NT, vorausgesetzt sie wurden von einem vernünftigen Benutzer genutzt. Die Programme dürften also seit 16 Jahren nicht gelaufen sein. :p
-
_Luckie schrieb:
Martin Richter schrieb:
Dann liefen die aber auch schon nicht unter Vista und ich weiß nicht was daran super ist

Und unter XP und unter 2000 und unter NT, vorausgesetzt sie wurden von einem vernünftigen Benutzer genutzt. Die Programme dürften also seit 16 Jahren nicht gelaufen sein. :p
100% korrekt...