[архив].: NSIS - все вопросы :.

Ответить
 • Просмотры: 19
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

kotkovets, У меня же прописано в скрипте:

RequestExecutionLevel user

!include UAC.nsh

А анси или уникод без разницы, я методом перебора пробовал. Все одно и тоже.
Аватара пользователя
wolkow70

Re: [архив].: NSIS - все вопросы :.

Сообщение wolkow70 »

kotkovets,



Внедряю функцию сохранения настроек для Opera. Столкнулся с проблемой:



Section "PreInstall" sec01

IfFileExists "$APPDATA\Opera\Opera\*.ini" 0 check_localappdata

MessageBox MB_YESNO|MB_ICONQUESTION "Файлы настроек Opera обнаружены в профиле Пользователя. Выполнить резервное копирование файлов настроек для дальнейшего использования? (Будут находиться в каталоге $DOCUMENTS\Opera Backup)" IDNO no_backup

CreateDirectory "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$APPDATA\Opera\Opera\*.adr" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$APPDATA\Opera\Opera\*.ini" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$APPDATA\Opera\Opera\*.xml" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$APPDATA\Opera\Opera\*.dat" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$APPDATA\Opera\Opera\*.js" "$DOCUMENTS\Opera Backup\"

check_localappdata:

IfFileExists "$LOCALAPPDATA\Opera\Opera\cache" 0 check_programdir

MessageBox MB_YESNO|MB_ICONQUESTION "Кэш браузера, файлы почты и иные данные обнаружены в профиле Пользователя. Выполнить резервное копирование данных для дальнейшего использования? (Будут находиться в каталоге $DOCUMENTS\Opera Backup)" IDNO no_backup

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\cache\*" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\mail\*" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\application_cache\*" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\icons\*" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\thumbnails\*" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\widgets\*" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\vps\*" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\opcashe\*" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\temporary_downloads\*" "$DOCUMENTS\Opera Backup\"

goto no_backup

check_programdir:

IfFileExists "$INSTDIR\profile\*.ini" 0 no_backup

MessageBox MB_YESNO|MB_ICONQUESTION "Файлы настроек Opera обнаружены в папке назначения. Выполнить резервное копирование файлов настроек для дальнейшего использования? (Будут находиться в каталоге $PROGRAMFILES\Opera Backup)" IDNO no_backup

CreateDirectory "$PROGRAMFILES\Opera Backup\"

CopyFiles "$INSTDIR\Profile\*.xml" "$PROGRAMFILES\Opera Backup\"

CopyFiles "$INSTDIR\Profile\*.ini" "$PROGRAMFILES\Opera Backup\"

CopyFiles "$INSTDIR\Profile\*.adr" "$PROGRAMFILES\Opera Backup\"

CopyFiles "$INSTDIR\Profile\*.dat" "$PROGRAMFILES\Opera Backup\"

CopyFiles "$INSTDIR\Profile\*.js" "$PROGRAMFILES\Opera Backup\"

no_backup:



В общем, резервные копии создаются, но в этом месте:

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\cache\*" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\mail\*" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\application_cache\*" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\icons\*" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\thumbnails\*" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\widgets\*" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\vps\*" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\opcashe\*" "$DOCUMENTS\Opera Backup\"

CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\temporary_downloads\*" "$DOCUMENTS\Opera Backup\"

копируются как сами папки , так и еще файлы в них содержащиеся отдельно. В результате получается каша...

Хочу посоветоваться в чем может быть дело?
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Цитата sawe:



Похоже на то, что у вас это 0,1 версия
[архив].: NSIS - все вопросы :.




Вот с ней все собирается. Но хочется современную версию прикрутить...



Может проблема в том, что у меня функция имеет такой вид:





Код:

Код: Выделить всё

Function .OnInit
UAC_Elevate:
    UAC::RunElevated 
    StrCmp 1223 $0 UAC_ElevationAborted ; UAC dialog aborted by user?
    StrCmp 0 $0 0 UAC_Err ; Error?
    StrCmp 1 $1 0 UAC_Success ;Are we the real deal or just the wrapper?
    Quit
UAC_Err:
  ;  MessageBox mb_iconstop "Unable to elevate, error $0"
    Abort
UAC_ElevationAborted:
    # elevation was aborted, run as normal?
  ;  MessageBox mb_iconstop "This installer requires admin access, aborting!"
    Abort
UAC_Success:
    StrCmp 1 $3 +4 ;Admin?
    StrCmp 3 $1 0 UAC_ElevationAborted ;Try again?
   ; MessageBox mb_iconstop "This installer requires admin access, try again"
    goto UAC_Elevate 
;
;
StrCpy $WindowCaption "${PRODUCT_NAME} ${PRODUCT_VERSION}"
StrCpy $SysDrive $WINDIR 2
StrCpy $GMODE 0
StrCpy $WindowCaption "${PRODUCT_NAME} ${PRODUCT_VERSION}"
${WordReplace} "$EXEFILE" ".exe" ".ini" "+" "$INIFILE" 
StrCpy $INIFILE "$EXEDIR\$INIFILE" 
${GetOptions} $CMDLINE "/G" $0
${IfNot} ${Silent}
${AndIfNot} ${Errors}
StrCpy $GMODE 1 
StrCpy $WindowCaption "Генератор ответов ${PRODUCT_NAME} ${PRODUCT_VERSION}" 
IfFileExists "$INIFILE" 0 +2
Delete "$INIFILE" 
${EndIf}
FunctionEnd
Аватара пользователя
wolkow70

Re: [архив].: NSIS - все вопросы :.

Сообщение wolkow70 »

wolkow70, я же вам писал:


Цитата kotkovets:



используете макросы из этого хедера
[архив].: NSIS - все вопросы :.






Код:

Код: Выделить всё

UAC_Elevate:
--
--

Вы же подключили хедер, но не используете его....))))

т.е вместо UAC_Elevate:[/i] нужно !insertmacro UAC_RunElevated

Ну в примере же прописано четко и он работает! а у вас нет...))
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Цитата wolkow70:



Похоже на то, что у вас это 0,1 версия »

Вот с ней все собирается. Но хочется современную версию прикрутить...
[архив].: NSIS - все вопросы :.




Собраться то собралось, а на практике оказалось не работает. Создал на WinXP SP3 учетную запись без прав админа, и инсталлятор не запустился (показывает ошибку Elevate).




Цитата kotkovets:



Вы же подключили хедер, но не используете его....))))
[архив].: NSIS - все вопросы :.




Я по справке все делал. А там не написано, что надо макросы использовать, а только прописать функцию Function .OnInit , RequestExecutionLevel user и !include UAC.nsh

Ладно, буду макросы раскуривать, может разберусь...
Аватара пользователя
wolkow70

Re: [архив].: NSIS - все вопросы :.

Сообщение wolkow70 »

Цитата kotkovets:



т.е вместо UAC_Elevate: нужно !insertmacro UAC_RunElevated
[архив].: NSIS - все вопросы :.




Ну, заменил я так. Инсталлятор собрался.

Только, пришлось при этом удалить:



Function .OnInstFailed

UAC::Unload ;Must call unload!

FunctionEnd

;

Function .OnInstSuccess

UAC::Unload ;Must call unload!

FunctionEnd



Так как, показало, что недействительные комманды. А макросов таких я не нашел в хедере.



И еще пришлось удалить



Function ExecAppFile

!insertmacro UAC_AsUser_ExecShell 'open' '$INSTDIR\KMPlayer.exe' '-firstrun' '$INSTDIR' ''

FunctionEnd



!insertmacro UAC_AsUser_ExecShell 'open' '$INSTDIR\KMPlayer.exe' '-firstrun' '$INSTDIR' ''



Так как, вылазила ошибка:



!insertmacro: end of _UAC_IncL

Error: command goto not valid outside Section or Function

Error in macro UAC_AsUser_ExecShell on macroline 2

Error in script "D:\NSIS\kmplayer-new.nsi" on line 99 -- aborting creation process
Аватара пользователя
sawe

Re: [архив].: NSIS - все вопросы :.

Сообщение sawe »

Цитата wolkow70:



И еще пришлось удалить

Function ExecAppFile

!insertmacro UAC_AsUser_ExecShell 'open' '$INSTDIR\KMPlayer.exe' '-firstrun' '$INSTDIR' ''

FunctionEnd
[архив].: NSIS - все вопросы :.




А кто жеж через open открывает исполняемый файл, это для shell-открытия: txt, сайты, линки, ассоцированные файлы с приложениями. Чет вы не с того конца изучаете - вот мучаетесь Изображение



Код:

Код: Выделить всё

!insertmacro UAC_AsUser_ExecShell "" "$INSTDIR\KMPlayer.exe" "-firstrun" "$INSTDIR"

и вообще -firstrun - аргумент командной строки

все расписано, а че вы не видите это загадка...
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

kotkovets,

Если Вы зайдете на страницу



http://nsis.sourceforge.net/UAC_plug-in




то увидите, что я делал все точно так, как там написано.



; !insertmacro UAC_AsUser_ExecShell

!insertmacro UAC_AsUser_ExecShell 'open' '$INSTDIR\${APPFILE}' '-firstrun' '$INSTDIR' ''



Where $INSTDIR\${APPFILE} is the path to the file you want to launch.



If you use the MUI skin and have the installer launch the app for you, you will need to do a little more work.

!define MUI_FINISHPAGE_RUN

!define MUI_FINISHPAGE_RUN_FUNCTION ExecAppFile



Function ExecAppFile

!insertmacro UAC_AsUser_ExecShell 'open' '$INSTDIR\${APPFILE}' '-firstrun' '$INSTDIR' ''

FunctionEnd



И все остальное тоже строго по справке делаю, а оно не работает.. И Saw также приводил свой пример, как бы рабочий...
Аватара пользователя
sawe

Re: [архив].: NSIS - все вопросы :.

Сообщение sawe »

PS.

Так тоже не пашет.

Function: "ExecAppFile"

!insertmacro: UAC_AsUser_ExecShell

!insertmacro: macro "UAC_AsUser_ExecShell" requires 5 parameter(s), passed 4!

Error in script "D:\NSIS\kmplayer-new.nsi" on line 96 -- aborting creation process
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

В блоге,
на который вы давали ссылку
на чисто русском языке, буквально на пальцах, объяснены нюансы проблемы с user для UAC плагина.




читать дальше »




Код:

Код: Выделить всё

RequestExecutionLevel user
Section "MainSection" SEC01
      SetShellVarContext all
    ... весь код главной секции
      GetFunctionAddress $0 RunFromUser
      UAC::ExecCodeSegment $0
 SectionEnd





В каждом Zip архиве этого плагина, есть описание и примеры, часть из которых задокументирована под конкретный случай.

Советую вам сначала отложить ваш скрипт и поиграться с примерами UAC, проблемные места выводить в меседж. Также советую (если нету) создать новую учётную запись и под ней отлаживать UAC.



может пригодиться.[/i]


читать дальше »






Код:

Код: Выделить всё

UAC::Exec "параметр_или_команда_UAC" "$INSTDIR\Имя.exe" "параметр" "место_выполнения_или_нахождения"
или примерно с ожиданием:
UAC::ExecWait "" "$INSTDIR\Имя.exe" "Readme.txt" "$INSTDIR\XXX"
папка $INSTDIR\XXX - где лежит файл  Readme.txt





--
Ответить

Вернуться в «Автоматическая установка приложений»