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

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

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

Сообщение wolkow70 »

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

Но ни один из них не умеет завершать оболочку системы, с ошибками работают в WIN7 и т.д

Решил написать свой плагин, за основу взял вышеупомянутый плагин...

В общем долго "мучил" свой проект. И вот что получилось:

---

Плагин предназначен для ANSI версии NSIS, кроссплатформенный (х86/x64), только для систем Windows NT начиная от Win2000 и выше.

Никаких дополнительных приложений, библиотек не требуется. Плагин полностью идентичен по функционалу стандартного диспетчера задач. (использованы не документированные функции Win API)

1. Поиск запущенного процесса


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




Код:

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

nsRestart::FindProcess "процесс.exe" 
Pop $var

Где $var[/i] принимает следующие значения:



Код:

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

$var = 1 -> процесс не найден, не запущен
$var = 0 -> процесс запущен





2. Запись в файл *.ini список процессов с идентификаторами


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




Код:

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

nsRestart::ListProcess "Путь\файл.ini" 
Pop $var

Где $var[/i] принимает следующие значения:



Код:

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

$var = error -> ошибка
$var =0 -> список успешно создан





3. Получение полного пути запущенного процесса


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




Код:

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

nsRestart::PathProcess "процесс.exe" 
Pop $var

Где $var[/i] принимает следующие значения:



Код:

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

$var = 1 -> процесс не найден, не запущен
$var  -> путь к запущенному процессу





4. Получение полного пути и командной строки запущенного процесса

Если запущеный процесс не имеет аргументов командной строки, то получаем путь к процессу.

Работает эта функция только с 32-битными процессами.

Достойного рещения для 64-битных процессов пока не нашел.


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




Код:

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

nsRestart::CmdPathProcess "процесс.exe" 
Pop $var

Где $var[/i] принимает следующие значения:



Код:

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

$var = 1 -> процесс не найден, не запущен
$var  -> путь к запущенному процессу + аргументы процесса





5. Перезапуск с аргументами командной строки запущенного процесса.

Перезапуск делается с задержкой в одну секунду.

Естественно кроме, специфических процессов (служб и т.д).

64-битные процессы будут перезапущены без аргументов командной строки.

Я категорически не рекомендую делать перезапуск системных процессов !!!

Во избежания потерь данных и получения "синих" экранов смерти !!!!



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




Код:

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

nsRestart::RestartProcess "процесс.exe" 
Pop $var

Где $var[/i] принимает следующие значения:



Код:

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

$var  =  0  -> процесс успешно перезапущен
$var  =  1  -> процесс не запущен, не найден
$var  =  2  -> процесс невозможно завершить
$var  =  3  -> процесс завершен, но невозможно запустить





6. Завершение процесса

Я категорически не рекомендую "прибивать" системные процессы !!!

Во избежания потерь данных и получения "синих" экранов смерти !!!!



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




Код:

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

nsRestart::KillProcess "процесс.exe" 
Pop $var

Где $var[/i] принимает следующие значения:



Код:

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

$var  =  0  -> процесс успешно завершен
$var  =  1  -> процесс не запущен, не найден
Аватара пользователя
Kelinmiir

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

Сообщение Kelinmiir »

Доброго времени суток!



Имеется программа и несколько баз данных (БД) для нее, сейчас с помощью NSIS я создаю инсталятор в котором совмещены сама программа и БД, а в процессе установки появляется меню в котором можно выбрать какие БД нужно установить. Вопрос: как разделить инсталятор, чтобы в самом инсталяторе находилась только программа, а БД находились гденибудь рядом, но при этом процесс установки остался неизменным (запускаем инсталятор, появляется меню с выбором БД и все успешно инсталируется).
Аватара пользователя
Krinkels

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

Сообщение Krinkels »

А ты запихни БД в архивы(например cab или 7zip). Потом делаешь выбор БД на странице компонентов, и в зависимости от выбора распаковываешь ту или иную базу данных.
Аватара пользователя
Krinkels

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

Сообщение Krinkels »

Цитата wolkow70:



Получилось сделать удаление записи Winamp , а восстановление не получается.

ReadRegStr $0 HKCR "AudioCD\shell\play\command" ""

StrCmp $0 "$\"$PROGRAMFILES\Winamp\Winamp.exe$\" %1" 0 +2

DeleteRegValue HKCR "AudioCD\shell\play\command" ""
[архив].: NSIS - все вопросы :.




дык тут и записи в реестр нету...)))

че тут думать, если $0 не равно "$\"$PROGRAMFILES\Winamp\Winamp.exe$\" %1",

то пропустить ниже две команды относительно оператора StrCmp, иначе выполнить две команды



Код:

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

ReadRegStr $0 HKCR "AudioCD\shell\play\command" "" 
StrCmp $0 "$\"$PROGRAMFILES\Winamp\Winamp.exe$\" %1" 0 +3
    DeleteRegValue HKCR "AudioCD\shell\play\command" ""
    ;здесь одна команда записи в реестр...

Почитайте про безусловные переходы в справочнике, там все четко прописано,

или сделайте логическую конструкцию операторами лексиграфического сравнения.
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

Цитата kotkovets:



дык тут и записи в реестр нету...)))
[архив].: NSIS - все вопросы :.




Дак, ниже запись была такая..





ReadRegStr $R0 HKCR “AudioCD\shell\play\command" "Winamp_Back"

${IfThen} $R0 != "" ${|} WriteRegStr HKCR “AudioCD\shell\play\command" "" $R0 ${|}

DeleteRegValue HKCR "AudioCD\shell\play\command" "Winamp_Back"
Аватара пользователя
yyv

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

Сообщение yyv »

Можно ли, создать кустомную страницу используя nsDialog для отображения страницы СтартМеню,

или альтернативный метод без использования плагина StartMenu.dll.
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

можно на основе этих примеров:
http://nsis.sourceforge.net/Header_file_for_Listview


Естественно нужно попотеть, изучить парочку функций WinApi
Аватара пользователя
wolkow70

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

Сообщение wolkow70 »

kotkovets,

Подскажите, плиз, что нужно добавить в данный макрос, что бы в контекстном меню файлов появилось Открыть в FastStone Image Viewer.



!macro RegisterExtension extenstion ContentType PerceivedType ClassName DefaultIcon OpenCommand



WriteRegStr HKCR "${extenstion}" "" "${ClassName}"

WriteRegStr HKCR "${extenstion}" "PerceivedType" "${PerceivedType}"

WriteRegStr HKCR "${extenstion}" "Content Type" "${ContentType}"

WriteRegStr HKCR "${ClassName}\DefaultIcon" "" "${DefaultIcon}"

WriteRegStr HKCR "${ClassName}\shell\open\command" "" "${OpenCommand}"

!macroend





Пробовал сам добавить таким макаром:



var CommandName





!macro RegisterExtension extenstion ContentType PerceivedType ClassName DefaultIcon OpenCommand CommandName



WriteRegStr HKCR "$ClassName\shell\open" "" "CommandName"



StrCpy $CommandName "Открыть в FastStone Image Viewer"



!insertmacro RegisterExtension ".bmp" "image/bmp" "image" "FastStone.bmp" "$OUTDIR\FSIcons.db,0" $OpenCommand $CommandName





Не работает вариант!
Аватара пользователя
kotkovets

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

Сообщение kotkovets »

wolkow70

Две строчки кода и никаких гвоздей! на примере Reg2Nsis



Код:

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

Section
  WriteRegStr HKLM "SOFTWARE\Classes\regfile\shell\Reg2Nsis" "" "&Convert to nsis script"
  WriteRegStr HKLM "SOFTWARE\Classes\regfile\shell\Reg2Nsis\command" "" "$\"${NSISDIR}\reg2nsis.exe$\" $\"%1$\" -O"
SectionEnd
Аватара пользователя
wolkow70

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

Сообщение wolkow70 »

Цитата funtykin:



необходимо реализовать диалоговое окно в котором нужно указать фаил и скопировать его в дальнейшем в путь установки.
[архив].: NSIS - все вопросы :.




Не совсем понятен смысл этих действий, если я правильно понял, то попробуй покрути такой вариант.



Код:

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

  !include MUI.nsh ; интерфейс MUI2.nsh не катит!  
  SetCompressor /SOLID lzma
  XPStyle on
  Name "MMM"
  OutFile Test_file.exe
  InstallDir "$PROGRAMFILES\MMM" # папка установки по умолчанию!
  InstallDirRegKey HKLM "Software\MMM" "" # получить установку папки из реестра если доступно!
  RequestExecutionLevel user
;Спец страницы!
  !define MUI_PAGE_CUSTOMFUNCTION_PRE WelcomePageSetupLinkPre
  !define MUI_PAGE_CUSTOMFUNCTION_SHOW WelcomePageSetupLinkShow
  !define MUI_WELCOMEPAGE_TITLE "Вас приветствует установщик $(^Name)"
  !define MUI_TEXT_WELCOME_INFO_TEXT "Пожалуйста закройте все работающие приложения. \
  $\nЭто обновит системные файлы без перезагрузки.$\n$\n$\nВыберите файл для вашей установки."
;Последовательность открытия страниц!
  !insertmacro MUI_PAGE_WELCOME
  !insertmacro MUI_PAGE_DIRECTORY
  !insertmacro MUI_PAGE_INSTFILES
  !insertmacro MUI_LANGUAGE Russian
Function WelcomePageSetupLinkPre
  var /global Filic
  StrCpy $Filic "$EXEDIR\Text.txt"
  !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Settings" "Numfields" 4 # счетчик увеличения!
  !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 3" "Bottom" 100 # ограничение размера верхней метки!
  !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Type" FileRequest # тип!
  !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Text" ""
; Определите фильтр, для элементов которые можно выбрать, разделять чертой | без пробелов
  !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Filter" "Filter=Text Files|*.txt|Programs|*.exe;*.com|All Files|*.*"
  !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "State" "$Filic" # состояние!
  !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Left" 120 # отступ слева! 
  !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Top" 100 # отступ от верха! 
  !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Right" 320 # длина вправо! 
  !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Bottom" 112 # высота строки! 
  !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Flags" "NOTABSTOP|FILE_EXPLORER" # флаг!
  !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "HWND" "" # высота строки!  
FunctionEnd
Function WelcomePageSetupLinkShow
  !insertmacro MUI_INSTALLOPTIONS_SHOW
FunctionEnd
Section -bbbbbb # секция установки файлов!
/*------- MMM ---------*/
SectionEnd
Ответить

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