| 

.NET C# Java Javascript Exception

2
Ich habe ein Setupprogramm für eine x86 Anwendung (VS2008 - VB.NET - Setup-Projekt) erstellt. Dieses MSI erstellt einen Benutzer, der aber nicht auf der Anmeldeseite von Windows7 erscheinen soll.

Unter HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList trägt man dafür alle Benutzernamen ein.

Bei x86-System klappt es mit

Dim regkey As RegistryKey
regkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList", True)

Bei x64 System lande ich aber in HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\....

Wie kann ich mit einem 32bit-Setup auf den "normalen" Key zugreifen? Wie kann ich auf einfache Art festellen, ob x64 oder x86 benutzt wird?
21.04.2011
MyKey0815 1,6k 2 9
1
Info:
64bit Versionen haben 32bit und 64bit Keys in der Registry. Nun hatte Microsoft das Problem das es natürlich Namensüberschneidungen geben kann/wird. Um das zu Lösen werden Keys von 32bit Anwendungen in HKEY_LOCAL_MACHINE\Software\WOW6432 abgelegt.
mindengine 09.05.2011
Ja, "die Ursache" für mein Problem ist schon klar. Nur wie kann ich mit einem 32bit-System trotzdem, in das 64bit-Bereiche schreiben?
MyKey0815 09.05.2011
2 Antworten
1
Eine einfache Möglichkeit um festzustellen ob 32 oder 64 Bit benutzt wird:
Generate CPU Bit
Public Shared Function GenerateArchitecture()
If Registry.LocalMachine.OpenSubKey("Hardware\Description\System\CentralProcessor\0").GetValue("Identifier").ToString.Contains("x86") Then : Return "32"
Else : Return "64" : End If
End Function
06.05.2011
mindengine 83 1 5
Danke für die Teillösung. Nun brauch ich nur noch einen Weg, um auf den passenden Pfad in der Registry zu kommen, wenn es sich um ein 64bit-System handelt ;-)
MyKey0815 07.05.2011
Das weis scheinbar niemand!
– Gast 26.09.2011
Hast mich neugierig gemacht - auch weil ich gerade selbst Setup-Projekte am Hals habe. Ich hab was gefunden, siehe meine Antwort.
Matthias Hlawatsch 26.09.2011
0
Mir fallen spontan dazu zwei Lösungen ein.

Die eine wäre, zwei Setup-Projekte anzulegen, je nachdem ob Du auf einem 32- oder 64-Bit-System installierst. Ein Setup für x64 "sieht" dann den gewünschten Registry-Teil. Das geht natürlich nur dann, wenn Dein Setup sonst nichts enthält, was auf einem 64-Bit-System unbedingt nach 32-Bit-Manier erfolgen müßte. Und je nach Größe des Setups ist das auch aufwendig zu pflegen.

Die andere Möglichkeit baut auf der Antwort von mindengine auf: Du greifst über P/Invoke und Windows-APIs auf die Registry zu und bedienst Dich der Infos in Accessing an Alternate Registry View, um den passenden Registry-Teil zu manipulieren. Habe das nicht selbst ausprobiert, aber dem Text nach müßte es gehen.
26.09.2011
Matthias Hlawatsch 13,2k 4 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH