2012-03-19 15 views
5

Mam 32-bitową aplikację i 32-bitowy instalator, napisany w Wise Installation Studio. Wiem, że ... Nie powinienem używać Mądrego i powinienem przełączyć się na coś innego. Ale na razie utknąłem z tym.Zapisywanie do rejestru 64-bitowego z 32-bitowego instalatora

Nasza aplikacja intensywnie korzysta z grafiki i zwiększa wydajność. Chcemy, aby podczas pracy wyłączała kompozycję pulpitu (Windows Aero). Osiągnęliśmy to w systemach 32-bitowych, dodając wpis rejestru pod adresem:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers 

o wartości DISABLEDWM.

Powoduje to domyślne zaznaczenie pola wyboru "Wyłącz kompozycję pulpitu" na karcie zgodności właściwości dla naszego pliku EXE.

Działa to doskonale w systemach 32-bitowych, ale podczas uruchamiania instalatora w systemie 64-bitowym system Windows przekierowuje tworzenie wpisów rejestru do HKLM\SOFTWARE\Wow6432Node, a flaga nie jest ustawiona poprawnie. Jeśli ręcznie utworzyć wpis w 64-bitowym widoku rejestru, działa.

Jak zatem zmusić ten klucz rejestru do utworzenia w 64-bitowym widoku rejestru z naszego 32-bitowego instalatora? Czy istnieje lepszy sposób na ustawienie tej właściwości oprócz tworzenia wpisu rejestru?

+1

Czy ten projekt Wise jest instalatorem MSI? –

+0

@ChristopherPainter: Nie sądzę (nie wiem jak to sprawdzić). Ale wynikowy instalator ma rozszerzenie ** .exe ** (nie .msi). Masz pomysł, gdzie go szukać w Wise Installation Studio? – Travesty3

Odpowiedz

4

Nie jestem pewien, jakie możliwości daje Wise w odniesieniu do skryptów, ale sposobem uzyskania dostępu do rejestru 64-bitowego ze zwykłego programu jest użycie KEY_WOW64_64KEY podczas manipulowania rejestrem.

Jeśli istnieje możliwość uruchomienia z pliku zewnętrznego pliku EXE, powinien on rozwiązać problem.

+0

Dzięki. Wygląda na to, że będziemy musieli to zrobić, przynajmniej dopóki nie przekonam wszystkich, że warto poświęcić trochę czasu na migrację do nowego instalatora. – Travesty3

0

Używam również Wise i muszę obsługiwać zarówno okna 32-, jak i 64-bitowe. Osiągnąłem pewien sukces, używając plików wsadowych do wywołania reg.exe, aby usunąć i wysłać 64-bitowe wpisy rejestru. Powinieneś być w stanie zastosować tę samą technikę, aby dodać i zmodyfikować rejestr. Szukam "plików programu (x86), aby określić, czy jest to 64-bitowe okna.Jeśli nie, używam rodzimych kontroli rejestru w mądry, w przeciwnym razie używam plików wsadowych z przekazanymi parametrami. Reg.exe powinien być na twojej ścieżce . udać się do dOS i typu Vilnius/dostać składnię

mam regtest.bat, który zawiera następujące elementy:?. reg.exe zapytania% 1/v% 2>% 3

Pierwszy parametr to klucz rejestru, drugi to wartość, a trzeci to plik tekstowy, do którego jest zapisywany.

Moje regdelete.bat zawiera: reg.exe delete% 1/f Parametr jest wpisem do rejestru usunąć.

0

Problem nadal istnieje, chociaż rejestr zapytań z Reg.exe Ponieważ po wywołaniu pliku bat przez Wise, zapytanie reg nie może znaleźć klucza 64-bitowego (można znaleźć tylko klucz 32-bitowy).

3

Nie jestem pewien, czy to rozwiązanie było możliwe w tym czasie padło pytanie, ale można utworzyć działanie niestandardowe, który wykonuje polecenia REG ADD i obejmują przełącznik /reg:64 coś takiego:

REG ADD "HKLM\Software\Example" /v "Name" /t REG_SZ /d "Data" /reg:64 

/reg:64 przełącznik zmusi go do rejestru 64-bitowego. Nie jestem do końca pewien, co to zrobi w systemie 32-bitowym, ale spodziewam się, że prawdopodobnie zostanie zignorowany.

+0

To jest właściwie właściwy sposób na zrobienie tego. Akceptowana odpowiedź jest ważna dla wywołań API, ale w tym przypadku, używając REG do dodania/usunięcia klucza,/reg: 64 zrobi lewy. –