Entwickler-Ecke

Dateizugriff - Wo Serial in Registry ablagen


Bitburki - Mi 02.06.10 15:45
Titel: Wo Serial in Registry ablagen
in meiner Setup-Routine meiens Programms speicher ich bei erfolgreicher Seriennummerneingabe die Serial in die Registry:

Delphi-Quelltext
1:
2:
3:
           regist.RootKey:= HKEY_LOCAL_MACHINE;
           if (regist.OpenKey('SOFTWARE\bitburkis_app', true) = true) then
             regist.WriteString('serial', szSerialNum);

Leider haben nun einige User das Problem, daß der Wert nicht in der Registry gespeichert wird (deshalb startet das Programm nicht). Ich frage mich deshalb, soll ich anstatt im Root "hkey_local_machine" lieber im Root "hkey_current_user" speichern? Oder am Besten in beiden?
(Das Problem tritt auch dann auf, wenn unter Adminuser installiert wird und unter anderem User gestartet werden soll)...

Wo würdet ihr so einen Eintrag abspeichern?

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Narses - Mi 02.06.10 15:53

Moin!

user profile iconBitburki hat folgendes geschrieben Zum zitierten Posting springen:
Wo würdet ihr so einen Eintrag abspeichern?
Genau da gehört sowas hin, wenn man den Setup-Typ "Alle Benutzer" gewählt hat. :nixweiss:

Für "Nur für mich" wäre dann HKCU angebracht, selber Zweig.

Die spannende Frage ist also eher: warum kann der Schlüssel nicht angelegt werden oder zumindest nicht gelesen? :gruebel: Es scheint ja Leute zu geben, bei denen alles funktioniert. Was also unterscheidet die funktionierenden von den nicht-funktionierenden Installationen?

cu
Narses


Bitburki - Mi 02.06.10 16:10

Das weiß ich eben auch nicht.
Das Setup geschieht über Macrovision Installshield, und da gibts dann ne Integration von nem Serial Dialog. Unter der Serialeingabe steht dann die Option (jeden, der diesen Computer verwendet || oder || Nur für mich). Aber wie komme ich an die Daten ran? Vielleicht liegts ja daran

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Achja, meine Function schaut in der DLL so aus:

Delphi-Quelltext
1:
function Validate(mainwin: Hwnd; szSrcDir, szSupport, szSerialNum, szDataBase: LPSTR): Integer; exportstdcall                    
Kann ich dort irgendwo abfragen?

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Narses - Mi 02.06.10 16:24

Moin!

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Was also unterscheidet die funktionierenden von den nicht-funktionierenden Installationen?
user profile iconBitburki hat folgendes geschrieben Zum zitierten Posting springen:
Das weiß ich eben auch nicht.
Naja, wie willst du das dann jemals beheben? :?

Du könntest zunächst mal diese =TRUE-Abfrage rausschmeißen:

Delphi-Quelltext
1:
if (regist.OpenKey('SOFTWARE\bitburkis_app', true) = truethen // das markierte einfach weglassen, ist eh unnötig, wenn nicht gar falsch                    

cu
Narses


SvenAbeln - Mi 02.06.10 16:50

Wie greifst du denn auf die Registry zu um die Seriennummer zu prüfen?
Unter Windows Vista und Windows 7 darf ein normaler User die Keys unter HKEY_LOCAL_MACHINE nur readonly öffnen.


Delphi-Quelltext
1:
2:
3:
regis:= TRegistry.Create(KEY_READ);
// oder
regis.Access := KEY_READ;


Bitburki - Do 03.06.10 14:38

Naja, schreiben tu ich wie im Eingangspost beschrieben.
Lesen würde auch klappen, wenn er denn geschrieben hätte...
Ich vermute es liegt hier ein Berechtigungsproblem vor.
Ich habs jetzt erstmal so gelöst, daß wenn er im Setup die Serial richtig eingegeben hat, ich das Setupprogramm den Registrywert hart vergebe (import reg-file). Das scheint zu funktionieren