Толик Панков
hex_laden
............ .................. ................
Back August 15th, 2019 Forward
NSIS: продолжение установки после перезагрузки.

Преамбула


Например, у нас есть софтина, которая в процессе своей установки требует перезагрузку, после чего доустанавливается. Например, софт устанавливает свой драйвер, обновление, или же регистрирует системный сервис. Как реализовать инсталлятор для такой программы?

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

Алгоритм


0. Проверяем наличие уникального ключа Реестра, сигнализирующего о том, что надо выполнить вторую часть установки (после перезагрузки):

DetailPrint "Read After Reboot flag..."
ReadRegStr $R0 HKCU "Software\Microsoft\Windows\CurrentVersion\"
"${APPNAME}_afterreboot"
StrCmp "$R0" "1" AfterReboot


1. Производим все действия, которые необходимо произвести до перезагрузки (устанавливаем драйвера, регистрируем DLL и т.д.)
2. Записываем в однократную автозагрузку (ключ Реестра RunOnce) наш инсталлятор, путь к exe файлу инсталлятора, который можно взять из переменной $EXEPATH.
Автозагрузку прописываем для текущего пользователя (пользователя, запустившего установщик), т.е. в ключ HKEY_CURRENT_USER.

WriteRegStr HKCU
"Software\Microsoft\Windows\CurrentVersion\RunOnce"
"${APPNAME}" "$EXEPATH"


Примечание: В RunOnce могут записаться программы, которые требуется выполнить однократно при загрузке системы. После выполнения программ, ключ RunOnce очищается автоматически, что отличает его от ключа Run, где данные не очищаются, и его можно использовать, как постоянную автозагрузку.

3. Устанавливаем уникальный флаг, по которому будем определять, что инсталлятор был запущен после перезагрузки, например, таким образом:

DetailPrint "Write After Reboot flag..."
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\"
"${APPNAME}_afterreboot" "1"


4. Выдаем запрос на немедленную перезагрузку:

DetailPrint "Reboot request."
MessageBox MB_YESNO|MB_ICONINFORMATION
"Installation will be cobntinue after reboot. Press OK to reboot now." IDYES RebootID


Если пользователь ответил "Yes", сразу перезагружаемся:

	RebootID:
		DetailPrint "Rebooting..."
		Reboot


Если нет, ждем перезагрузки вручную:

DetailPrint "Installation continue if user restart system."
Goto SecEnd


5. После перезагрузки удаляем флаг (проверив его наличие, см выше):
DetailPrint "Delete After Reboot flag..."
DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\"
"${APPNAME}_afterreboot"


6. И продолжаем установку...
DetailPrint "Continue install after reboot..."

Скриншоты





Исходник примера


На GitHub

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/08/12/nsis-prodolzhenie-ustanovki-posle-perezagruzki/

Tags: ,
Замена концов строк Windows/DOS (CR LF \r \n) на Linux (LF \n) в bash

Проще всего сделать sed'ом.

В том же самом файле (добавляем параметр командной строки -i):

sed -i 's/\r$//' file.txt

В другой файл:

cat winfile.txt | sed -i 's/\r$//' >linuxfile.txt

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/08/15/zamena-kontsov-strok-windows-dos-cr-lf-r-n-na-linux-lf-n-v-bash/

Tags: ,
Вставить строку в начало текстового файла в Linux

Добавление строки без помощи sed


echo "First line" >newfile.txt
cat oldfile.txt >>newfile.txt
mv newfile.txt oldfile.txt


С помощью sed


sed -i -e '1 s/^/First line\n/' file.txt

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/08/15/vstavit-stroku-v-nachalo-tekstovogo-fajla-v-linux/

Tags: ,
Back August 15th, 2019 Forward