Реестр пакетных файлов в 64-битной Vista - PullRequest
0 голосов
/ 21 апреля 2009

Привет, ребята, я снова :) У меня проблема с командным файлом, который я написал. Он отлично работает в 32-битных системах, но, очевидно, не работает в 64-битных системах, и я не знаю почему, потому что у меня нет доступа к 64-битной системе.

Это код, который работает в 32-битной системе Vista

    @echo off
Set Reg.Key=HKLM\SOFTWARE\Malwarebytes' Anti-Malware
  Set Reg.Val=InstallPath
  For /F "Tokens=2*" %%A In (
   'Reg Query "%Reg.Key%" /v "%Reg.Val%" ^| Find /I "%Reg.Val%"'
  ) Do Call Set MBAMPATH=%%B

Может кто-нибудь переписать его для работы на 64-битной версии, пожалуйста?

Спасибо, всегда :) 1008 *

Ответы [ 3 ]

6 голосов
/ 21 апреля 2009

Нет разницы между пакетными файлами в x86 и x64 версиях Windows. Возникшая у вас проблема связана с WoW64 и прозрачным перенаправлением реестра, подробнее см. здесь .

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

Set Reg.Key=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Malwarebytes' Anti-Malware
Set Reg.Val=InstallPath
For /F "Tokens=2*" %%A In (
    'Reg Query "%Reg.Key%" /v "%Reg.Val%" ^| Find /I "%Reg.Val%"' )
Do Call Set MBAMPATH=%%B
echo %mbampath%

Ваш другой пост включает условную ветвь, основанную на переменной среды% processor_architecture%. Проблема в том, что (по крайней мере, на моей машине) %processor_architecture% это "AMD64", а не "x64".

Почему бы просто не запросить оба возможных ключа реестра вместо ветвления, основанного на архитектуре?

0 голосов
/ 11 июня 2014

У меня похожая проблема, когда мне нужно было знать каталог установки Notepad ++. Если это на 64-разрядной ОС, то мне нужно искать в ключе HKLM \ SOFTWARE \ Wow6432Node \ Notepad ++ reg. Причина, по которой я не ищу арку процессора, заключается в том, что вы можете установить 32-битную ОС на 64-битную машину. Вот код, который я придумал и, кажется, нашел правильный путь для меня:

:: выяснить, x86 или x64 OS - нужен другой ключ reg для запроса установочного каталога ЕСЛИ СУЩЕСТВУЕТ "% ПРОГРАММ (X86)%" перейти к X64 ELSE goto X86

: X64 FOR / F "tokens = 2 * delims =" %% A IN ('REG QUERY "HKLM \ SOFTWARE \ Wow6432Node \ Notepad ++"') DO SET NPPPath = "%% B \ plugins \ APIs" echo NPPPath - это% NPPPath% SET BITNESS = "SixtyFour" Перейти к CopyAPIFile

: X86 FOR / F "токены = 2 * delims =" %% A IN ('REG QUERY "HKLM \ SOFTWARE \ Notepad ++"') DO SET NPPPath = "%% B \ plugins \ APIs" :: echo NPPPath равен% NPPPath% SET BITNESS = "ThirtyTwo" Перейти к CopyAPIFile

0 голосов
/ 21 апреля 2009

Прежде всего, я не знаю ничего, что могло бы отличаться для пакетных файлов в 64-битной Windows от 32-битной.

Вы можете попробовать удалить echo off с самого начала, чтобы увидеть, какая строка выдает какое сообщение об ошибке (при условии, что вы видите любое сообщение).

Однако, возможно, что-то конфликтует с апострофами, которые вы использовали в цикле for. Вы можете попробовать изменить его на

for /f "usebackq tokens=2*" %%A in (`Reg Query "%Reg.Key%" /v "%Reg.Val%" ^| Find /I "%Reg.Val%"`) Do Call Set MBAMPATH=%%B

И пока мы на этом. Почему вы call set там? В этом нет необходимости, поэтому вы также можете удалить его:

... do set MBAMPATH=%%B
...