[CMD] Добавление ключей в реестр в зависимости от разрядности ОС

Wu-Tang

Эксперт клуба THG
Сообщения
213
Реакции
54
интересует, как реализовать следующее, добавление твика в зависимости от того, какая ос - 86/64.
вел диалог по этому вопросу на других форумах.
подкинули вариант:
Код:
@echo off

Set xOS=x64
If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86 (
reg add "HKCR\*\shell\notepad" /v "" /t REG_SZ /d "Открыть в Блокноте" /f
reg add "HKCR\*\shell\notepad" /v "icon" /t REG_SZ /d "%ProgramFiles%\Notepad++\notepad++.exe,0" /f
reg add "HKCR\*\shell\notepad\command" /v "" /t REG_SZ /d "\"%ProgramFiles%\Notepad++\notepad++.exe\" \"%%1\"" /f 
) else (
reg add "HKCR\*\shell\notepad" /v "" /t REG_SZ /d "Открыть в Блокноте" /f
reg add "HKCR\*\shell\notepad" /v "icon" /t REG_SZ /d "%ProgramFiles(x86)%\Notepad++\notepad++.exe,0" /f
reg add "HKCR\*\shell\notepad\command" /v "" /t REG_SZ /d "\"%ProgramFiles(x86)%\Notepad++\notepad++.exe\" \"%%1\"" /f 
)
exit /b
который на х64 отрабатывает, а на х86 обрезает путь в реестре - http://ipic.su/img/img7/fs/2021-05-05_13-04-47.1620304284.jpg
пробовал разные вариации, но везде работает либо там, либо там.
может есть рабочие варианты для моей задачи?
 
@Wu-Tang, ты это потом в SFX заворачиваешь?
Если да, то тогда там же модулем в зависимости от разрядности просто разные твики выполнять.
 
@AlexZir,
все равно обрезает путь на х86 (((

@regist,
ага )))
это как? просто у меня с конф файлом sfx туго, мне его на ру-борде написали, я только добавки в батники вношу и рег файлы, а его и не трогаю.

Код:
;!@Install@!UTF-8!
SetEnvironment="Name=Tweaks-Win7 x64"
SetEnvironment="Vers= 1.0 [%%P]"
SetEnvironment="timer=10"
Title="Установка %Name%"
BeginPrompt="Установить Tweaks-Win7 x64?"
ExtractTitle="Распаковка файлов ..."
ExtractDialogText="Подождите пожалуйста ..."
FinishMessage="Tweaks-Win7 x64 установлены! Будет выполнена перезагрузка компьютера!  "

GUIFlags="2+4+8+16+32+2048+4096"
GUIMode="1"
MiscFlags="4"

RunProgram="waitall:hidcon:cmd /c PowerRun.exe /SW:0 /SYS \"%%T\\tweaks.bat\""
RunProgram="waitall:hidcon:cmd /c \"%%T\\tweaks2.bat\""
RunProgram="waitall:%%P:filemenu.exe /ai"
RunProgram="fm%timer%:forcenowait:hidcon:cmd /c CD /d ..\\&Ping -n %timer% localhost &Shutdown -r -f -t 0"
;!@InstallEnd@!
 
На ру-борде тебе бармалей тебе просто ошибку с экранирование в твоём твике для Npp исправил, а про конфиги ты на Осзоне ведь спрашивал. И если по конфигу вопросы, то наверно правильней там ибо там больше профи мониторят, которые уже сотни сборок собрали.
А так тут ничего сложного нет и описано в справке к модулю:
Платформенные секции определяются суффиксами (только два вида):

x86 (i386) - для 32-битной операционной системы
x64 (amd64) - для 64-битной операционной системы
В скобках указаны допустимые замены. Варианты записи:

INI:
;!@Install@!UTF-8:x86!
RunProgram="setup_86.exe"
;!@InstallEnd@:x86!

;!@Install@!UTF-8:x64!
RunProgram="setup_64.exe"
;!@InstallEnd@:x64!

;!@Install@!UTF-8:amd64!
RunProgram="setup_64.exe"
;!@InstallEnd@:amd64!
 
+ Сейчас бегло просмотрел твой конфиг. У тебя в самом начале идёт:
SetEnvironment="Name=Tweaks-Win7 x64"

Только местами её используешь, а местами нет. Замени на неё тогда уже и тут:
BeginPrompt="Установить %Name%?"
FinishMessage="%Name% установлены! Будет выполнена перезагрузка компьютера! "
 
@AlexZir,
почитал внимательно, но там про определение запуска экзешника и как туда прилепить добавление reg ключей, я не знаю.
@regist,
про конфиг и на oszone спрашивал и на ру-борде, в итоге мне iglezz год назад помог с ним до конца через личку на борде.
А так тут ничего сложного нет и описано в справке к модулю
в любой случае надо спрашивать, если что-то в конфиг добавлять, тк сам скорее допущу ошибки, тк практики нет в этом, как мне помогли тогда, я его не трогаю, в батник все напихиваю, тк в нем хоть понимание есть, что и как примерно делается, кроме сложных случаев.
так:
Код:
;!@Install@!UTF-8!
SetEnvironment="Name=Tweaks-Win7 x86/x64"
SetEnvironment="Vers= 1.0 [%%P]"
SetEnvironment="timer=10"
Title="Установка %Name%"
BeginPrompt="Установить %Name%?"
ExtractTitle="Распаковка файлов ..."
ExtractDialogText="Подождите пожалуйста ..."
FinishMessage="%Name% установлены! Будет выполнена перезагрузка компьютера!  "
в общем по добавлению в реестр, мне вчера подкинули рабочий вариант:
Код:
setlocal

if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
    %SystemRoot%\SysWOW64\cmd.exe /c ""%~f0" %*"
) else (
    reg add "HKCR\*\shell\notepad" /ve /d "Открыть в Блокноте" /f
    reg add "HKCR\*\shell\notepad" /v "icon" /d "%ProgramFiles%\Notepad++\notepad++.exe,0" /f
    call reg add "HKCR\*\shell\notepad\command" /ve /d "\"%%ProgramFiles%%\Notepad++\notepad++.exe\" \"%%%%1\"" /f
)
проверил, все гуд.

теперь осталось:
Код:
xcopy "Notepad++" "%ProgramFiles(x86)%\Notepad++" /H /E /G /Q /R /Y /I
те либо в ProgramFiles(x86) для х64, либо в ProgramFiles для х86.
 
Все твои проблемы уйдут если ты не будешь костыли прикручивать к батнику, а будешь использовать WinAPI (тем более у тебя есть такая возможность) и в зависимости от этого запускать разные батники.
Сделай два разных батника один для x32 второй для x64.

И прочти справку по модулю, попробуй сделать, не получится спроси. Тем более заготовка конфига у тебя есть, в справке примеры конфигов также есть. Ничего не мешает попробовать поправить. не сработает попробовать по другому. Что от этого теряешь? Зато получишь опыт и знания и не будешь зависеть, чтобы кто-то тебе писал и правил при необходимости конфиг.
 
Чуть подправил на свой вкус твоё название.

SetEnvironment="Vers= 1.0 [%%P]" - у тебя где-нибудь в батнике или ещё где-то используется? Если нет, то тогда убрать вообще эту строку.

Пересмотрел справку, там можно проще без введения дополнительних секций.
И чисто для примера обновлённый конфиг, подредактируй его уже сам когда сделаешь два отдельных батника. Может там ещё упростить можно, я там твою кухню не знаю.
PS. Конфиг в работе не проверял.

INI:
;!@Install@!UTF-8!
SetEnvironment="Name=Tweaks-Win7 [%%P]"
SetEnvironment="Vers= 1.0 [%%P]"
SetEnvironment="timer=10"
Title="Установка %Name%"
BeginPrompt="%Name%?"
ExtractTitle="Распаковка файлов ..."
ExtractDialogText="Подождите пожалуйста ..."
FinishMessage="Tweaks-Win7 установлены! Будет выполнена перезагрузка компьютера!"
GUIFlags="2+4+8+16+32+2048+4096"
GUIMode="1"
MiscFlags="4"
RunProgram="waitall:hidcon:cmd /c PowerRun.exe /SW:0 /SYS \"%%T\\tweaks.bat\""
RunProgram="x86:waitall:hidcon:cmd /c \"%%T\\tweaks2-86.bat\""
RunProgram="x64:waitall:hidcon:cmd /c \"%%T\\tweaks2-64.bat\""
RunProgram="waitall:%%P:filemenu.exe /ai"
RunProgram="fm%timer%:forcenowait:hidcon:cmd /c CD /d ..\\&Ping -n %timer% localhost &Shutdown -r -f -t 0"
;!@InstallEnd@!
 
Последнее редактирование:
@regist,
Все твои проблемы уйдут если ты не будешь костыли прикручивать к батнику, а будешь использовать WinAPI
те командами из конф файла sfx модуля.
SetEnvironment="Vers= 1.0 [%%P]" - у тебя где-нибудь в батнике или ещё где-то используется? Если нет, то тогда убрать вообще эту строку.
да как-то и не использовал по итогу, хотя изначально планировал.

И прочти справку по модулю, попробуй сделать, не получится спроси. Тем более заготовка конфига у тебя есть, в справке примеры конфигов также есть. Ничего не мешает попробовать поправить. не сработает попробовать по другому. Что от этого теряешь? Зато получишь опыт и знания и не будешь зависеть, чтобы кто-то тебе писал и правил при необходимости конфиг.
при использовании, предложенного тобой, я так понимаю, проще будет вносить добавки, не просив писать батник с определением разрядности для каждой команды.
И чисто для примера обновлённый конфиг, подредактируй его уже сам когда сделаешь два отдельных батника. Может там ещё упростить можно, я там твою кухню не знаю.
с этим конфигом, я теперь могу внести в tweaks общие твики для обеих разрядностей, а в tweaks 86 и 64 внести те, которые зависят уже от архитектуры, верно?
и уже будет заложено авто определение и в зависимости от этого будет запускаться либо tweaks 86 либо tweaks 64?
 
>>с этим конфигом, я теперь могу внести в tweaks общие твики для обеих разрядностей, а в tweaks 86 и 64 внести те, которые зависят уже от архитектуры, верно?
>>и уже будет заложено авто определение и в зависимости от этого будет запускаться либо tweaks 86 либо tweaks 64?
Да и при запуске твикера будет писать, что это твикер для такой-то разрядности (в зависимости от того, где запустишь).

А также я вообще не понимаю смысл этого:
>>теперь осталось:
Код: xcopy "Notepad++" "%ProgramFiles(x86)%\Notepad++" /H /E /G /Q /R /Y /I

Ты сначала куда-то распаковываешь, а потом зачем-то копируешь батником, при этом ещё оставляю "мусор" в той папке куда распаковал изначально (хотя не знаю, может у тебя потом батник и подчищает). Что тебе мешает сразу распаковывать куда надо?
 
ну, все ведь распаковывается sfx-ом в temp, оттуда применяется и копируется по назначению, потом временная папка удаляется сама, я никаких команд спецом не добавлял для этого.
Что тебе мешает сразу распаковывать куда надо?
по команде из конф файла? не знал как реализовать, поэтому реализовал в батнике.
 
>>ну, все ведь распаковывается sfx-ом в temp
Распаковывается туда куда ты укажешь. Так пишешь словно Автологером ни разу логи не собирал. А там ведь никаких батников нет. всё средствами модуля сделано.
>>потом временная папка удаляется сама
Ты проверял, что она удаляется? Я как-то в этом не уверен.
>>по команде из конф файла? не знал как реализовать, поэтому реализовал в батнике.
Прочти уже наконец справку.
 
Ты проверял, что она удаляется? Я как-то в этом не уверен.
Всё-таки из временной папки он потом удаляет, а из остальных нет Модифицированный SFX модуль 7-Zip'а для установок
И это первая же страница по обсуждению модуля и сразу готовый пример установки в программ файлс (то что ты через батник мутишь).
Я уже молчу, что в справке полно разных примеров и её всю можно за один день от и до прочитать, не не большая она. Намного больше времени ты тратишь на форумах на придумывание костылей которые штатным функционалом там реализовывается.
 
Последнее редактирование:
@regist,
Распаковывается туда куда ты укажешь. Так пишешь словно Автологером ни разу логи не собирал. А там ведь никаких батников нет. всё средствами модуля сделано.

Ты проверял, что она удаляется? Я как-то в этом не уверен.
специально не указывал, но все проверял, что распак идет в temp потом все автоудаляется.
да, справку я читал, причем несколько раз, но некоторые моменты в ней были не ясны, поэтому и реализовывал все в бате.
Всё-таки из временной папки он потом удаляет, а из остальных нет Модифицированный SFX модуль 7-Zip'а для установок
И это первая же страница по обсуждению модуля и сразу готовый пример установки в программ файлс (то что ты через батник мутишь).
по ссылке идет пример с распаком в programfiles, но мне вот не ясно куда это будет на х86 и х64, в progs86 или просто в progs и тд
те ты предлагаешь отказаться от батников и реализовать все в конфиге sfx?
 
Последнее редактирование:
да, справку я читал, причем несколько раз, но некоторые моменты в ней были не ясны, поэтому и реализовывал все в бате.
Так и спрашивай про то что не понятно, но нужно тебе для реализации.
по ссылке идет пример с распаком в programfiles, но мне вот не ясно куда это будет на х86 и х64, в progs86 или просто в progs и тд
1) Сколько времени тебе нужно, чтобы запустить у себя SFX и проверить куда распакуется? А сколько времени в среднем ждать на форуме пока кто-то ответит?
2) Ещё раз повторюсь прочитал бы справку по модулю и понял бы, что эта переменная означает ровно тоже самое, что и в батнике (она не модулем вводится). В батнике это какой путь?
те ты предлагаешь отказаться от батников и реализовать все в конфиге sfx?
Я предлагаю максимально упростить используя тот функционал который даётся. Можно ли реализовать полностью без батников или нет я никак не могу ответить ибо понятие не имею, что ты хочешь сделать. + у меня не так много опыта по сборке этих модулей.
 
+ Я так понимаю ты делаешь репак Npp. Если и так ты его весь перепаковываешь и заново все ассоциации прописываешь, то зачем ты хочешь его ставить обязательно в программ файлс учитывая, что он портативен из коробки. Поставил бы любую удобную тебе папку и вопросы про "progs86 или просто в progs" отпали бы сами собой. При желании можно и ярлыки потом на эту папку создать.
 
1) Сколько времени тебе нужно, чтобы запустить у себя SFX и проверить куда распакуется? А сколько времени в среднем ждать на форуме пока кто-то ответит?
на виртуалке по минуте на каждой х86 и х64.
на форуме, как правило сутки.
2) Ещё раз повторюсь прочитал бы справку по модулю и понял бы, что эта переменная означает ровно тоже самое, что и в батнике (она не модулем вводится). В батнике это какой путь?
в батнике идет условие, на х86 распак в program files, на х64 в program files x86.
а как там в модуле я хз.
Можно ли реализовать полностью без батников или нет я никак не могу ответить ибо понятие не имею, что ты хочешь сделать. + у меня не так много опыта по сборке этих модулей.
у тебя немного, а у меня совсем его мало )))
Я так понимаю ты делаешь репак Npp. Если и так ты его весь перепаковываешь и заново все ассоциации прописываешь, то зачем ты хочешь его ставить обязательно в программ файлс учитывая, что он портативен из коробки. Поставил бы любую удобную тебе папку и вопросы про "progs86 или просто в progs" отпали бы сами собой. При желании можно и ярлыки потом на эту папку создать.
не совсем, ассоциаций нет, просто пункт в контекстное меню и распак программы и его минимальных настроек в app.
в progs делаю распак, для того чтобы, если юзер захочит обновить версию, просто запустит скаченный инсталлер, который все обновит в progs.
в общем мне такой вариант видится правильным имхо
весь проект не сложен: твики из рег файлов hkcu.reg и hklm.reg, установка filemenutools, распаковка блокнота с добавлением в контекстное меню пункта, вот и все.
сейчас, если что-то добавляю, то только новые твики в данные файлы.
 
>>на виртуалке по минуте на каждой х86 и х64.
На x32 проверять нет смысла, там только один вариант пути в любом случае. Итоге одна минута, чтобы проверить на виртуалке (а это в принципе и не реальной можно проверить) против суток ожидания на форуме. Так что выводы делай сам :).
>>в батнике идет условие, на х86 распак в program files, на х64 в program files x86.
Если ты не поставишь условие, а просто вставишь эту команду, то куда пойдёт?
>>а как там в модуле я хз.
Ещё раз повторюсь прочитай справку, после этого сможешь сделать любой нужный тебе вариант. Там даже есть пример как собрать, чтобы вывело список всех возможных путей.
Если тебе лень читать справку, то мне тем более лень читать и пересказывать её при этом ещё пытаясь угадать какой вариант тебе нужен.
 
Назад
Сверху Снизу