Unicode NSIS Installer и плагин UAC: как обмениваться данными между внутренними и внешними экземплярами - PullRequest
0 голосов
/ 06 февраля 2012

Я хочу установить пакет MSI на уровне пользователя и установить несколько ключей реестра в HKLM. Второй требует уровня администратора, и я могу сделать это с помощью плагина NSIS :: UAC. Но мне нужен способ уведомить InnerInstance (с привилегиями уровня администратора) о том, какие флажки выбрал пользователь. Существуют следующие возможные способы обмена такой информацией (только 1 или 0)

  • Ini-файл в папке, к которому оба экземпляра могут получить доступ

безуспешно, APPDATA отличается и COMMONAPPDATA требует уровня администратора, TMP также не вариант, потому что это зависит от имени профиля

  • Глобальная переменная приложения

безуспешно, переменных не существует. Кстати, даже если я запускаю простую консоль, устанавливаю переменную и запускаю другую консоль - я не видел переменную

  • Напишите плагин, который устанавливает и получает семафор

Предположим, что он слишком сложен для простой проблемы установки, но выберет его, если другой вариант не будет доступен

  • SyncVariable макросы

! Macro _SyncVariable _variable ! определить Lprefix L $ { LINE } нажмите $ R0 goto _SyncVariableInner $ {Lprefix} _SyncVariableOuter $ {Lprefix}: StrCpy $ R0 $ {_ переменная} вернуть _SyncVariableInner $ {Lprefix}: ! insertmacro UAC_AsUser_Call Label _SyncVariableOuter $ {Lprefix} $ {UAC_SYNCREGISTERS} StrCpy $ {_ variable} $ R0 ! undef Lprefix поп $ R0 ! macroend ! define SyncVariable !insertmacro _SyncVariable

это должно работать, но не

  • Получить новый плагин UAC - не видел, где я могу получить бинарный файл, потому что последняя версия не поддерживала сборку NSIS Unicode

Итак, кто-то может мне помочь с ссылками, мыслями?

1 Ответ

0 голосов
/ 07 февраля 2012

Официальной сборки NSIS для Unicode нет, есть разветвленный проект, но плагин UAC не поддерживается в этой конфигурации и, следовательно, не предоставляет для него скомпилированную DLL (вы можете получить скомпилированную версию, если спросите в IRC канале NSIS).

Этот тип гибридного установщика трудно понять правильно, и не следует делать это ИМХО. Если вы используете плагин Access Control для предоставления всем пользователям права на запись в $windir\temp\{yourguid} или HKLM\Software\{yourguid}, вы можете обмениваться информацией, но это также потенциальная дыра в безопасности. Та же проблема существует с именованными глобальными объектами ядра (семафор, карты памяти и т. Д.)

...