Запись в 64-битный реестр из 32-битного установщика - PullRequest
5 голосов
/ 19 марта 2012

У меня есть 32-разрядное приложение и 32-разрядный установщик, написанный в Wise Installation Studio. Я знаю ... Мне не следует использовать Wise, и я должен переключиться на что-то другое. Но сейчас я застрял с этим.

Наше приложение интенсивно использует графику и для повышения производительности мы хотим, чтобы оно отключало композицию рабочего стола (Windows Aero) во время работы. Мы достигли этого на 32-битных системах, добавив запись в реестре по адресу:

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

со значением DISABLEDWM.

Это устанавливает флажок «Отключить композицию рабочего стола» на вкладке совместимости в свойствах нашего EXE-файла, который будет установлен по умолчанию.

Это прекрасно работает в 32-разрядных системах, но при запуске установщика в 64-разрядной системе Windows перенаправляет создание записей реестра на HKLM\SOFTWARE\Wow6432Node, и флаг устанавливается неправильно. Если я вручную создаю запись в 64-битном представлении реестра, то это работает.

Итак, как я могу заставить этот раздел реестра быть создан в 64-разрядном представлении реестра из нашего 32-разрядного установщика? Или есть лучший способ установить это свойство отдельно от создания записи реестра?

Ответы [ 6 ]

4 голосов
/ 04 мая 2016

Я не уверен, было ли это решение возможным во время, когда был задан этот вопрос, но вы можете создать настраиваемое действие, которое выполняет команду REG ADD и включает переключатель /reg:64, например:

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

Переключатель /reg:64 переведет его в 64-битный реестр.Я не совсем уверен, что это будет делать в 32-битной системе, но я ожидаю, что это, вероятно, будет проигнорировано.

4 голосов
/ 19 марта 2012

Я не уверен, какие возможности предоставляет Wise для сценариев, но способ доступа к 64-битному реестру из обычной программы - использовать KEY_WOW64_64KEY при манипулировании реестром.

Если есть возможность хотя бы запустить внешний EXE-файл из установки, это должно решить вашу проблему.

0 голосов
/ 23 августа 2018

Вы также можете использовать

c:\Windows\SysNative\REG.exe ADD "HKLM\Software\Example" /v "Name" /t REG_SZ /d "Data"

Это заставляет использовать 64-битную версию reg.exe. Конечно, это не сработает, если вы работаете на 32-битной ОС. Поэтому вам следует проверить тип ОС и затем вызвать соответствующую программу reg.exe (либо c: \ Windows \ System32 для 32-битной ОС, либо C: \ Windows \ SysNative для 64-битной ОС).

Переменная среды PROCESSOR_ARCHITEW6432 будет иметь значение AMD64, если это 64-разрядная ОС, и пустая, если 32-разрядная ОС.

0 голосов
/ 15 августа 2013

Проблема все еще существует, хотя реестр запросов с Reg.exe Потому что, когда файл bat вызывается Wise, запрос reg не может найти 64-битный ключ (можно найти только 32-битный ключ).

0 голосов
/ 20 июня 2013

Я также использую Wise и должен поддерживать 32- и 64-битные окна.Я имел некоторый успех, используя командные файлы для вызова reg.exe, чтобы удалить и запросить 64-битные записи реестра.Вы должны быть в состоянии использовать ту же технику для добавления и изменения реестра.Я ищу "программные файлы (x86), чтобы определить, являются ли они 64-битными окнами. Если нет, я разумно использую нативные элементы управления реестром, в противном случае я использую командные файлы с переданными параметрами. Reg.exe должен быть в вашем путиПерейдите в приглашение dos и введите reg /? для получения синтаксиса.

У меня есть regtest.bat, который содержит следующее: запрос reg.exe% 1 / v% 2>% 3

Первый параметр - это ключ реестра, второй - это значение, а третий - текстовый файл, в который он записан.

Мой regdelete.bat содержит: reg.exe delete% 1 / f Параметрзапись реестра, которую вы хотите удалить.

0 голосов
/ 19 марта 2012

Обычно вы не можете получить доступ к 64-битному реестру из 32-битных приложений.Я нашел некоторый код, предназначенный для PowerShell, который позволяет вам получить доступ к 64-битному реестру через WMI: http://gallery.technet.microsoft.com/scriptcenter/6062bbfc-53bf-4f92-994d-08f18c8324c0

Однако я не уверен, что вы можете использовать это в Wise.Вместо этого вы можете использовать Windows Installer XML и создать 64-битный MSI.

...