Comments 58
Позанудствую :). В винде имена дисков могут быть и двухбуквенными.
Проект имеет открытый исходный код - с удовольствием приму pull-request :-)
Теоретически можно добавить перебор по двум буквам. Но как-то совсем всё это грустно. Плюс очень сомневаюсь, что кто-то реально захочет делать системные утилиты именно на РНР.
Либо не иметь букву, тогда нужно к ним обращаться по GUID, например: \\?\Volume{4c9de12e-05bc-11ed-b939-0242ac120002}\
Эммм... Чо? Где об этом почитать можно?
Но ведь в винде можно просто открыть "Мой Компьютер" и увидеть всю эту информацию.
На всякий случай, не знаю как там в других ОС, в Windows ниже 11 версии, кажется, WebView не поставляется вместе с системой (это кстати, не тот же браузер, что стоит и запускается по-умолчанию), а отдельный компонент весом 175 Мб. Собственно, как тот же Qt, например. Ну как бы не совсем и миниатюрное получается... Но согласен, все идет к тому, что в недалеком будущем этот компонент уже будет установлен.
Даже в Windows 10 WebView придётся доустановить отдельно. Но это разовая операция.
Интересно, как объяснить пользователю, что для моей "миниатюрной утилиты", которая показывает размер диска, нужно разово установить такую хрень. И нафига она ему нужна (мы-то знаем, что понадобится, но он-то нет.)
По мне, ситуация похожа на .Net4 в Windows 7: приложения маленькие, но требуют жирного дотнет установленного в системе. Нужно приложение? Устанавливай дотнет. Не хочешь? Тогда не будет тебе нашего приложения.
Чтобы было менее болезненно можно при запуске своего приложения как-то проверять, установлен ли в системе WebView. И если нет, то показывать сообщение с возможностью установить компонент прям оттуда. Или просто перекидывать на сайт.
Только разница в том, что .NET4 предустановлен в Win7, в отличие от этого.
И да, инсталлер .NET весит меньше :)
Хм. Я точно помню что доустанавливал какие-то версии дотнета на семёрке. Как минимум, я как разработчик могу затребовать уствновленного .NET Framework 4.7.2, который слишком новый чтобы идти сразу с семёркой.
Да, инсталлер весит меньше. Время идёт, программы жиреют. Если так важен именно размер и совместимость со старыми системами - то можно воспользоваться например тем же Nuklear упомянутым в начале статьи.
Чтобы было менее болезненно можно при запуске своего приложения как-то проверять, установлен ли в системе WebView.
У меня был мини-проект на дотнете, калькулятор для фотокниг. В итоге сама прога весила пару мегабайт с учетом ресурсов, но..
Программа должна была просто запускаться с флешки фотографов без установки всяких многомегабайтных зависимостей. И в этом кейсе дотнет не прокатил. У кого-то был win7, у кого-то xp. Заработала моя прога у пары клиентов только.
В итоге проект переписал другой человек на делфи. Прога осталась маленькой, но на клиентских компах ничего выкачивать уже не надо было.
Некоторые приложения же умеют вызывать системное диалоговое окно "для работы программы необходимо установить следующие компоненты Windows: бла-бла-бла скачать в Интернете"
Раньше используемая им обёртка над webview умела использовать MSHTML и Edge, а сейчас, похоже, разучилась.
Я не сишник, но позволю себе усомниться в том, что в героя версия с поддержкой MSHTML )
В версии 0.1.1 были следы MSHTML и EdgeHTML (раз, два), а в мастере ничего похожего не заметил, зато вижу WebView2.
ALFIS же использует, насколько понимаю, Boscop/web-view версии 0.7.3 и он похож на независимый порт с легко заметными файлами webview_mshtml.c и webview_edge.cpp и никаких следов нового WebView2.
CivetWeb (бывший Mongoose до смены лицензии) является стандартом де-факто когда нужно что-то быстро раздать по HTTP на десктопе.
mg_printf(conn,
"HTTP/1.1 200 OK\r\nContent-Type: "
"text/html\r\nConnection: close\r\n\r\n");
mg_printf(conn, "<html><body>\r\n");
mg_printf(conn,
"<h2>This is an example text from a C++ handler</h2>\r\n");
mg_printf(conn,
"<p>To see a page from the A handler <a "
"href=\"a\">click here</a></p>\r\n");
Как-то слабо они форкнулись. Ожидал, что уж этот страшный сон в современном коде уже не увидеть.
Извините, не дочитал до конца. Но GUI под виндой дешевле всего в PowerShell. Он везде есть и умеет как минимум winForms. Да и с системой очень плотно связан, можно и список дисков получить без перебора и реестр прочитать...
Кстати диски не обязательно к буквам привязаны, их ещё можно в папки монтировать.
подозреваю, что если обратиться к диску A: при существующем флоппи-драйве, то можно и подвиснуть
Остался всего один шаг до веб приложения. Почему бы его не сделать? Пусть остается портативный сервер и обычный браузер. Тем более, браузеры сейчас есть во всем, что имеет экран. А иногда даже и там, где нет экрана.
А что если сервер будет сам открывать окно браузера, а при закрытии окна браузера сервер будет автоматически выключаться?
Звучит хорошо. Но сложнореализуемо. В браузере часто открыто много вкладок, и о закрытии конкретной он систему не информирует, насколько мне известно.
Ещё можно например пинговать сервер каждую секунду. И убивать сервер по таймауту если ничего не пришло. Тоже так себе решение - браузер вполне может отправить вкладку в сяпщий режим.
Можно что угодно использовать с поддержкой соединения: long polling, web sockets и т.д.
А long polling или web sockets и т.д. работают пока вкладка находится в Sleep mode?
Если вы имеете в виду, работает ли web sockets когда вкладка неактивна, то да, работает. Если же речь про Google Chrome sleeping tab option, то эта опция по умолчанию выключена. На мой взгляд, если пользователь достаточно продвинут, чтобы включить эту опцию, то со вкладками он точно разберется. А у остальных все должно будет просто работать. Но на 100% я не уверен, нужно пробовать.
Worker затычку сделать для пинга сервера. И сделать эту затычку обязательным файлом наподобии как манифест для PWA.
>CivetWeb (бывший Mongoose до смены лицензии) является стандартом де-факто
Микроапач, размером в 5 мегабайт: https://github.com/splitbrain/dokuwiki-stickbuilder, с php7 - 8,5 мб
Не совсем понял, что это такое. В конце получается портативное приложение, не зависящее ни от чего? Или нужно устанавливать что-то в систему? 8.5 мегабайт - там и PHP с расширениями, и Apache и т.д.? Насколько вся связка полноценная? За счёт чего такой малый размер? Оригинальный ЕХЕ-файл php8 в винде весит порядка 80 мегабайт...
Портативное и достаточно полноценное. Даже сишный рантайм таскает с собой. Можно скачать и потестить: https://download.dokuwiki.org/ Поставьте галочку "Include Web-Server".
За счёт чего малый размер - это к автору, он провёл отличную работу) Библиотека php здесь занимает от 3 до 8 Мб в зависимости от версии и способа сборки. Расширений оставлен пяток (GD2, sqlite), но можно накидать своих.
Сборка могла бы быть ещё меньше, но некоторые библиотеки используют механизм cf-guard, и их нельзя сжимать через UPX.
А что там с сетевыми дисками? С дисками, подключаемыми через subst? С монтированием в каталоги? С reparse points?
К слову про всякие флоппики, оптические и сетевые диски: информацию о них следовало бы собирать асинхронно, достраивая представление по мере готовности данных. Что на упомянутом ранее .NET-е является типовым паттерном построения интерфейса.
Согласен, приложение не выдерживает критики. Но оно больше иллюстративный характер - что именно можно сделать в РНР :-)
А по сути, ответил ещё тут:
https://habr.com/ru/post/674192/#comment_24534444
А как сейчас в винде с .hta приложениями?
Спасибо. Очень хороший проект. У него есть своя сфера. Программы для тонких клиентов: например экраны заказа в ресторанах, терминалы обслуживания.
Если у компании облако на сервере написан на PHP, то им проще писать клиентские приложения так же на PHP., это тоже разработчики, и не нужно создавать отдельный отдел на C#..
Так же сфера тестирования и автоматизации. Я для автоматизации упаковки и развертывания проектов перепробовал разный софт, node.js слишком сложный для меня. Т.е. мне чтобы упаковать архивировать 5 версий одного проекта, а потом эти архивы переслать по FTP, изучать nodeJS, тяжело и накладно. Я это сделал на CMD.BAT, писал скрипт под windows, потратил день на создание скрипта, и день на исправление ошибок. День выходил потому что я не понимаю какие команды есть, и как работают. На PHP я бы сделал все за 2 часа.
Так что приложения PHP, давно хотят появиться на десктопе.
Для винды команда df и другие утилиты, есть в пакете CoreUtils for Windows и оно работает начиная с WinXP.
В команде df ценность в том что это текстовый вывод, который удобно использовать в скриптах. Однако, на Win7-64 эта df из CoreUtils for Windows не захотела работать и мне проще было набросать консольную программку на Delphi которая бы выводила то что мне нужно сразу в нужном мне формате.
ddf.exe имеет размер 44Кб и ей не нужно вообще ничего.
Код программы помещается на один экран.
Мусор
Миниатюрное десктопное GUI приложение на PHP — 2 МБ хватит для всех