Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
Формат вызова неверный »
Я уж попробовал по всякому. :) (и зачем было <rootkey> выделять в отдельный параметр ?)
MKN, Оно как-то странно работает или плохо документировано.
Для кодаAccessControl::GetRegKeyGroup "HKCU" "Software\7-Zip\"
Pop $R1
DetailPrint "HKCU:R1: $R1"
Pop $R2
DetailPrint "HKCU:R2: $R2"
AccessControl::GetRegKeyGroup "HKLM" "Software\7-Zip\"
Pop $R1
DetailPrint "HKLM:R1: $R1"
Pop $R2
DetailPrint "HKLM:R2: $R2"
Выдаёт в лог:
HKCU:R1: Software\7-Zip\
HKCU:R2: Cannot look up owner. Error code: 87
HKLM:R1: error
HKLM:R2: Cannot get current ownership. Error code: 2
К тому же у этого плагина не очень с обработкой ошибок, судя по моему непрофессиональному взгляду в исходники.
iglezz,
Значит этот плагин не годится... ( Придётся пользоваться PS, там с этим всё чётко, ну и можно "прикрутить" к Nsis... )
Всем привет.
У меня такой вот вопрос. Я, например, извлекаю реальное место установки программы так
ReadRegStr $R9 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\test.exe" "Put"
Все просто, если извлекать только из одного раздела. Это меня устраивает, но....
Можно ли как то прописать, чтобы указать дополнительное извлечения места с другого раздела.
ReadRegStr $R9 HKLM "SOFTWARE\test" "Put"
Параметр "Put"показывает одно и то же место , но вся закавыка, что любой из этих разделов может отсутствовать в реестре.
Нужно взять с первого раздела, а если раздел не найден, то со второго, но обязательно в одну переменную, например $R9. Если один из разделов или оба не найдены, то уведомление об этом не нужно. Как вот такое сотворить?
inco1, Нужно просто последовательно читать необходимые значения, с прерыванием последовательности в случае успеха.
В простейшем случае с проверкой на пустое/несуществующее значение: ReadRegStr $R9 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\test.exe" "Put"
StrCmp $R9 "" 0 +4
ReadRegStr $R9 HKLM "SOFTWARE\test" "Put"
StrCmp $R9 "" 0 +2
StrCpy $R9 "X:\путь\"
iglezz, Спасибо, это то, что нужно. Все просто и работает.
...подскажите как сделать так чтобы nsis отсылал запрос на iplogger!?
Хочу получать статистику о запуске моего софта.
pckassa, коли так — ну, так и делайте сие «в моём софте», а не в инсталляторе.
Это рекламная кампания.
Я пускаю траффик и мне нужно отслеживать конверт.
В сам софт я лезть не имею права, да и откровенно говоря я дуб-дубом в коде, элементарный NSIS скрипт Еще могу написать, кое как, но не более...
В общем нужно сделать именно так. Вдруг есть решение, подскажите пожалуйста!
Всем желаю здравствовать.
У меня опять проблема. Подскажите, ну никак не могу решить. Делаю простейший экзешник, который вносит настройки в некую программу и добавляет в папку с этой программой текстовый документ. Настройки этой программы для каждого конкретного пользователя в реестре в ветке HKEY_CURRENT_USER.
Вот код:
Unicode true
OutFile "test1.exe"
RequestExecutionLevel Admin
SilentInstall silent
SetCompressor /FINAL /SOLID lzma
!include "x64.nsh"
!include "FileFunc.nsh"
Section
WriteRegDWORD HKEY_CURRENT_USER "SOFTWARE\Adobe\Adobe Acrobat\DC\3D" "b3DEnableFlashPlayer" 0x0
SetOutPath "$PROGRAMFILES\\Adobe\Acrobat DC\Acrobat"
File "1.txt"
SectionEnd
Всё работает пока учетка админа. Добавляет настройку и добавляет текстовый файл. Но под простым пользователем это не работает. При запуске просит подтверждения админа и отрабатывает. Вот только эта настройка в реестре добавляется тому самому админу от которого получено разрешение. Текстовый файл в папку добавляется.
Если применить вот такой код:
Unicode true
OutFile "test1.exe"
RequestExecutionLevel user
SilentInstall silent
SetCompressor /FINAL /SOLID lzma
!include "x64.nsh"
!include "FileFunc.nsh"
Section
WriteRegDWORD HKEY_CURRENT_USER "SOFTWARE\Adobe\Adobe Acrobat\DC\3D" "b3DEnableFlashPlayer" 0x0
SetOutPath "$PROGRAMFILES\\Adobe\Acrobat DC\Acrobat"
File "1.txt"
SectionEnd
и просто сделать двойной клик, то запись добавляется правильно, но не добавляется текстовый файл. Если запустить от админа , о и запись настройки добавится админу, текстовый файл добавится.
Что я делаю не так?
В идеале нужно, чтобы запустить экзешник и настройки добавились всем пользователям данного компьютера. Но ничего подобного я нигде не нашел.
inco1,
Под какой версией/разрядностью Windows дело происходит?
iglezz, Доброго вечера.
Испытывал на 10х64. Параметры контроля на низу ползунка.
Добавлено.
Пробовал на 7х64 с двумя пользователями админ и одним простым с включенным контролем ползунок по рекомендации.
Простой пользователь отдаёт настройки реестра программы тому админу от кого получает разрешения.
Как то это не правильно.
inco1,
В первом случае всё понятно и правильно - установщик запускается от имени пользователя с админскими привилегиями и CURRENT_USER здесь уже не наш пользователь, запустивший установщик.
Во втором случае тоже всё правильно - нефиг пользователю в системных папках делать, чай не 90-е на дворе :)
Для внесения изменений в реестр сразу всем пользователям можно воспользоваться готовым решением в виде EnumUsersReg.nsh (https://nsis.sourceforge.io/EnumUsersReg)
iglezz, Спасибо. Это именно то, что я искал. Путем нехитрых подстановок в мой тестовый экзешник получилось следующее:
Unicode true
OutFile "test1.exe"
RequestExecutionLevel Admin
SilentInstall silent
SetCompressor /FINAL /SOLID lzma
!include "x64.nsh"
!include "FileFunc.nsh"
!include "EnumUsersReg.nsh"
Section
${EnumUsersReg} CallbackFunction temp.key
SetOutPath "$PROGRAMFILES\\Adobe\Acrobat DC\Acrobat"
File "1.txt"
SectionEnd
Function CallbackFunction
Pop $0
WriteRegDWORD HKU "$0\SOFTWARE\Adobe\Adobe Acrobat\DC\3D" "b3DEnableFlashPlayer" 0x0
FunctionEnd
Работает так как нужно, но вот компилируется с предупреждением "1 warning: 6020: Uninstaller script code found but WriteUninstaller never used - no uninstaller will be created".
На работу это предупреждение не влияет, но может можно как нибудь его убрать, чтобы совсем по правильному было?
может можно как нибудь его убрать »
Удали из EnumUsersReg.nsh всё связанное с макросом EnumUsersReg UN
MKN,
Спасибо. С этим разобрался.
iglezz,
Появилась попутная проблема.
Это работает как надо:
Unicode true
OutFile "test1.exe"
RequestExecutionLevel Admin
SilentInstall silent
SetCompressor /FINAL /SOLID lzma
!include "x64.nsh"
!include "FileFunc.nsh"
!include "EnumUsersReg.nsh"
Section
${EnumUsersReg} CallbackFunction temp.key
SetOutPath "$PROGRAMFILES\\Adobe\Acrobat DC\Acrobat"
File "1.txt"
SectionEnd
Function CallbackFunction
Pop $0
WriteRegDWORD HKU "$0\SOFTWARE\Adobe\Adobe Acrobat\DC\3D" "b3DEnableFlashPlayer" 0x0
FunctionEnd
И это работает как надо:
Unicode true
OutFile "test2.exe"
RequestExecutionLevel Admin
SilentInstall silent
SetCompressor /FINAL /SOLID lzma
!include "ProcessFunc.nsh"
Section
${KillProcess} "P.exe" $0
SectionEnd
Но вот незадача, не работает первое и второе вместе.
Unicode true
OutFile "test3.exe"
RequestExecutionLevel Admin
SilentInstall silent
SetCompressor /FINAL /SOLID lzma
!include "x64.nsh"
!include "FileFunc.nsh"
!include "ProcessFunc.nsh"
!include "EnumUsersReg.nsh"
Section
${KillProcess} "P.exe" $0
SectionEnd
Section
${EnumUsersReg} CallbackFunction temp.key
SetOutPath "$PROGRAMFILES\\Adobe\Acrobat DC\Acrobat"
File "1.txt"
SectionEnd
Function CallbackFunction
Pop $0
WriteRegDWORD HKU "$0\SOFTWARE\Adobe\Adobe Acrobat\DC\3D" "b3DEnableFlashPlayer" 0x0
FunctionEnd
При компиляции ошибка !include "EnumUsersReg.nsh" или !include "ProcessFunc.nsh" , в зависимости, что первой объявить.
!include "EnumUsersReg.nsh" и !include "ProcessFunc.nsh" не совместимы? Или я что то не так слепил?
inco1, Причина ошибок - одинаковые !define
По хорошему надо и в EnumUsersReg.nsh и в ProcessFunc.nsh добавить
!include Win\WinNT.nsh
и удалить дефайны, совпадающие во всех трёх файлах
iglezz, а разве в NSIS не пользуют какие-нибудь !IFNOTDEFINE и т.п.?
Iska, это можно, но на перспективу лучше не плодить сущности..
inco1, Модифицированные EnumUsersReg.nsh (https://raw.githubusercontent.com/iglezz/NSIS-related-things/master/EnumUsersReg.nsh) и ProcessFunc.nsh (https://raw.githubusercontent.com/iglezz/NSIS-related-things/master/ProcessFunc.nsh), которые не конфликтуют.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC