henry_flower: A melancholy wolf (Default)
henry_flower ([personal profile] henry_flower) wrote2024-04-06 09:42 pm

Інсталятори ув віндюку

Кожного разу як я перевіряю чи буде працювати лайнаксна аплікація на відюку, то жалкую що спробував.

Наприклад, є ноудний майкро-сервіс foo, який від ОС вимагає лише підтримку TCP/IP, робить жодних змін ув файловій системі, вимагає 0 суто лайнаксних API, пише logs до stdout, вважає що його будуть байнднути до умовного 12345 порту, що привілей спеціяльних не вимагає.

На лайнаксі для такого майкро-сервісу пишуть елементарного юніт-хфайлу ув ~/.config/systemd/user/foo.ini і Боб є ваш дядько--користувач лайнаксу (регулярний) контролює foo за допомогою звичних команд systemctl.

Ув віндюку, починаючи з 10 (чи 8?), з'явилися "per-user" сервіси, наприклад cbdhsvc (це так, у якості конспірації, зашифровується словосполучення сервіс кліпбоарду), які, незважаючи на назву, вимагають привілеї адміністраторські для свого створення і затишні поради "інсталюйте нові ваші аплікації до $env:APPDATA" зіштовхуються зі суворою реальністю майкрософтського ідіотизму.

Чи складно тоді сгенерувати інсталятора, що

  1. перепише директорію з хфайлами майкро-сервісу до $env:PROGRAMFILES/foo;
  2. створить ув реґістрі key з описом сервісу;
  3. створить на десктопі ув паблік фолдері (тобто для всіх користувачів) шортката на http://127.0.0.1:12345?

Нескладно, але я би поставив оцінку 3/10: не рекомендую.

До появи UWP аплікації, які у нас час роблять для майкрософтського магазину істоти що народилися лузерами, генерувався .msi хфайл. Більше 10 років тому для цього був wix toolset--декілька феноменально огидних CLI-утіліт, написаних людьми, для яких поняття смак є так само близьке, як відстань сузір'я Андромеди до планети Земля.

З того часу змінилося нічого. Є інші способи створювати інсталятори, наприклад Inno Setup (якщо вас не дратує даялекта паскалю (так), на якому доводиться писати шматки скриптів для будь-якої нетривіяльної дії), або InstallShield, якщо ви міцно поїхали головою та бажаєте сабскріпшона $2474/рік годувати якихось індусів.

Питати про wix будь-яку LLM--гаяти час. Гоогл забитий порадами для версії 3.x, яка малює даялоги для моніторів 2006 року з 96 dpi. Нова версія 5 має неймовірне поліпшення: вміє створювати список файлів сама, без допомоги ікстернального препроцесора або (я вибачаюсь) xslt! Для цього грандіозного leap forward їм знадобилося 20 років. А також:

  • "інторнет" шортката, який генерує wix, потім неможливо відредагувати (до permissions це стосунку не має), url є вшитий намертво;

  • якщо воно не може стартувати сервіса ув процесі інсталяції--настає павза та rollback, жодні твікі з vital=no, wait=no і т.і. не допомагають, хоча згідно пародії на документацію повинні;

  • інтерхфейсьні лейбли можуть стискатися ув залежності від різолюшену монітору та dpi--дуже зручно якщо ти повідомляєш користувачу "дивись logs ув $env:SystemRoot/Temp/foo*, а згенерований даялог малює .../foo*.

Куди правильно писати logs для користувача NT Authority\Local Service я так і не зрозумів. Від блискучих за точністю порад що він має limited write access to the file system у мене бажання перекваліфікуватися на ілектришона та до кінця своїх днів лагодити розетки ув субурбії Калґарі.

straktor: benders (Default)

[personal profile] straktor 2024-04-06 10:10 pm (UTC)(link)
Логи пишутся в систем эвент лог разумеется.

Инсталляторы сейчас никто не начинает юзать, каждый калека предусматривает сетевой апдейт вместо него. Если прилага не нужна, просто не юзай её, пусть себе занимает свои пол гига. Потом комп заменяется на новый и её не ставят на новом.

В линуксе юзер сервис это тоже извращение, делали псевдоюзера и второй инстанс например не предусмотрен. Сейчас всё в докерах, и на Винде тож можна докера на старте пущать.
waqur: (Default)

[personal profile] waqur 2024-04-07 09:58 am (UTC)(link)
Всё идёт так сложно, потому что вы пытаетесь решать проблемы (установка сервиса без прав админа), которые среднестатистического виндоюзера парят примерно так же, как погода на мысе Канаверал. Лучше ходить протоптанными дорожками. Поэтому, я бы сделал так:
– пофиг на права админа, инсталлируем обычный виндовый сервис (всрато, но работает везде, хоть на Windows XP, безо всяких этих WIX, UWP и прочего LGBT)
– разумеется, задействуем InnoSetup — но уже попроще, без скриптов на паскале (ежели душа требует лютого виндового пуризма, то можно написать INF-файл с установкой по правому клику и [DefaultInstall], опять же будет работать хоть на Windows XP)
– чтобы не усложнять свой код взаимодействием с Service Control Manager и не греться прочими виндоглупостями, добавляем в устанавливаемый архив враппер https://github.com/winsw/winsw с конфигом и далее себе спокойненько срём в stderr/stdout, как в линуксе.

Юзверям, кто жалуется, говорим "Ленин терпел и ты терпи" показываем пальцем на виндовую сборку nginx в качестве best industry practice и предлагаем ZIP-файл с портабельным EXEшником (типа, кувыркайся сам, если такой умник).
Edited 2024-04-07 10:45 (UTC)