Frage

Um den UAC-Dialog in Vista Pop-up, wenn sie die HKLM Registrierungsstruktur zu schreiben, entscheiden wir nicht die Win32 Registry API zu verwenden, wie wenn Vista Berechtigungen fehlen, würden wir brauchen, um unsere gesamte Anwendung neu zu beleben mit Administratorrechten. Stattdessen haben wir diesen Trick:

ShellExecute(hWnd, "runas" /* display UAC prompt on Vista */, windir + "\\Reg", "add HKLM\\Software\\Company\\KeyName /v valueName /t REG_MULTI_TZ /d ValueData", NULL, SW_HIDE);

Diese Lösung funktioniert gut, außer dass unsere Anwendung ist ein 32-Bit ein, und es läuft den REG.EXE Befehl, da es eine 32-Bit-Anwendung unter Verwendung der WOW-Kompatibilitätsschicht sein würde! :( Wenn REG.EXE von der Kommandozeile läuft wird, wird es lief richtig in 64-Bit-Modus. Weil dies wichtig ist, wenn es als eine 32-Bit-App läuft ist, wird der Registry-Schlüssel an der falschen Stelle am Ende aufgrund Registry Reflexion .

So ist es eine Möglichkeit, einen 64-Bit-App programmatisch von einer 32-Bit-Anwendung zu starten und nicht hat es mit dem WOW64-Subsystem wie seine Eltern 32-Bit-Prozess (dh eines „*“ Suffix im Task-Manager) läuft ?

War es hilfreich?

Lösung

versuchen, diese (von einem 32-Bit-Prozess):

> %WINDIR%\sysnative\reg.exe query ...

(festgestellt, dass hier ).

Andere Tipps

Ob ein 32-Bit- oder 64-Bit-nativen (unmanaged) Programm ausgeführt wird, hängt ausschließlich von der ausführbaren Datei. Es gibt zwei Kopien von reg.exe, in C: \ Windows \ System32 (64-Bit) und C: \ Windows \ SysWOW64 (32-Bit). Weil Sie keinen Pfad angeben, Sie bekommen, was zuerst in der PATH Umgebungsvariable erscheint, die die 32-Bit-Version für 32-Bit-Prozess ist.

Sie sollten wirklich diese Funktion ausklammern in ein separates Programm oder COM-Objekt, und das Programm mit einem Manifest markieren oder das COM-Objekt starten Sie die COM Erhebung Moniker .

Haben Sie darüber nachgedacht, eine kleine „Helfer“ Anwendung erstellen die Registrierung Update für Sie zu machen? Wenn Sie es auf 64-Bit und umfassen ein Manifest kompilieren, dass es Rechte erfordert Administrator gibt, dann wird es sowohl als Ausgangspunkt für decken.

Es gibt API die „Bitness“ des OS zu erkennen, Sie laufen auf so könnten Sie denkbar, kompilieren beide RegistryUpdate32.exe und RegistryUpdate64.exe und rufen Sie die entsprechenden ein.

Eine Sache, die ich als eine Lösung für mich getan habe, ist zu deaktivieren Umleitung auf PInvoke:

http: // msdn .microsoft.com / en-us / library / windows / Desktop / aa365744 (v = VS.85) aspx

Sie können es immer nach rechts wieder auf.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top