[архив].: NSIS - все вопросы :.
-
kotkovets
Re: [архив].: NSIS - все вопросы :.
kotkovets, У меня же прописано в скрипте:
RequestExecutionLevel user
!include UAC.nsh
А анси или уникод без разницы, я методом перебора пробовал. Все одно и тоже.
RequestExecutionLevel user
!include UAC.nsh
А анси или уникод без разницы, я методом перебора пробовал. Все одно и тоже.
-
wolkow70
Re: [архив].: NSIS - все вопросы :.
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\"
копируются как сами папки , так и еще файлы в них содержащиеся отдельно. В результате получается каша...
Хочу посоветоваться в чем может быть дело?
Внедряю функцию сохранения настроек для 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 - все вопросы :.
Цитата sawe:
Похоже на то, что у вас это 0,1 версия
Вот с ней все собирается. Но хочется современную версию прикрутить...
Может проблема в том, что у меня функция имеет такой вид:
Код:
Похоже на то, что у вас это 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, я же вам писал:
Цитата kotkovets:
используете макросы из этого хедера
Код:
Вы же подключили хедер, но не используете его....))))
т.е вместо UAC_Elevate:[/i] нужно !insertmacro UAC_RunElevated
Ну в примере же прописано четко и он работает! а у вас нет...))
Цитата kotkovets:
используете макросы из этого хедера
[архив].: NSIS - все вопросы :.
Код:
Код: Выделить всё
UAC_Elevate:
--
--Вы же подключили хедер, но не используете его....))))
т.е вместо UAC_Elevate:[/i] нужно !insertmacro UAC_RunElevated
Ну в примере же прописано четко и он работает! а у вас нет...))
-
kotkovets
Re: [архив].: NSIS - все вопросы :.
Цитата wolkow70:
Похоже на то, что у вас это 0,1 версия »
Вот с ней все собирается. Но хочется современную версию прикрутить...
Собраться то собралось, а на практике оказалось не работает. Создал на WinXP SP3 учетную запись без прав админа, и инсталлятор не запустился (показывает ошибку Elevate).
Цитата kotkovets:
Вы же подключили хедер, но не используете его....))))
Я по справке все делал. А там не написано, что надо макросы использовать, а только прописать функцию Function .OnInit , RequestExecutionLevel user и !include UAC.nsh
Ладно, буду макросы раскуривать, может разберусь...
Похоже на то, что у вас это 0,1 версия »
Вот с ней все собирается. Но хочется современную версию прикрутить...
[архив].: NSIS - все вопросы :.
Собраться то собралось, а на практике оказалось не работает. Создал на WinXP SP3 учетную запись без прав админа, и инсталлятор не запустился (показывает ошибку Elevate).
Цитата kotkovets:
Вы же подключили хедер, но не используете его....))))
[архив].: NSIS - все вопросы :.
Я по справке все делал. А там не написано, что надо макросы использовать, а только прописать функцию Function .OnInit , RequestExecutionLevel user и !include UAC.nsh
Ладно, буду макросы раскуривать, может разберусь...
-
wolkow70
Re: [архив].: NSIS - все вопросы :.
Цитата kotkovets:
т.е вместо UAC_Elevate: нужно !insertmacro UAC_RunElevated
Ну, заменил я так. Инсталлятор собрался.
Только, пришлось при этом удалить:
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
т.е вместо 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 - все вопросы :.
Цитата wolkow70:
И еще пришлось удалить
Function ExecAppFile
!insertmacro UAC_AsUser_ExecShell 'open' '$INSTDIR\KMPlayer.exe' '-firstrun' '$INSTDIR' ''
FunctionEnd
А кто жеж через open открывает исполняемый файл, это для shell-открытия: txt, сайты, линки, ассоцированные файлы с приложениями. Чет вы не с того конца изучаете - вот мучаетесь
Код:
и вообще -firstrun - аргумент командной строки
все расписано, а че вы не видите это загадка...
И еще пришлось удалить
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,
Если Вы зайдете на страницу
то увидите, что я делал все точно так, как там написано.
; !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 также приводил свой пример, как бы рабочий...
Если Вы зайдете на страницу
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 - все вопросы :.
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
Так тоже не пашет.
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 - все вопросы :.
В блоге,
Код:
В каждом Zip архиве этого плагина, есть описание и примеры, часть из которых задокументирована под конкретный случай.
Советую вам сначала отложить ваш скрипт и поиграться с примерами UAC, проблемные места выводить в меседж. Также советую (если нету) создать новую учётную запись и под ней отлаживать UAC.
может пригодиться.[/i]
Код:
--
на который вы давали ссылку
на чисто русском языке, буквально на пальцах, объяснены нюансы проблемы с 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--