Pull to refresh

Comments 58

Истинно говорю, настали последние времена.
Можно это подогнать под теорию заговора

Позанудствую :). В винде имена дисков могут быть и двухбуквенными.

Проект имеет открытый исходный код - с удовольствием приму pull-request :-)
Теоретически можно добавить перебор по двум буквам. Но как-то совсем всё это грустно. Плюс очень сомневаюсь, что кто-то реально захочет делать системные утилиты именно на РНР.

Либо не иметь букву, тогда нужно к ним обращаться по GUID, например: \\?\Volume{4c9de12e-05bc-11ed-b939-0242ac120002}\

Пусть все гуиды перебирает)))

Спасибо большое, добавил в статью.

Эммм... Чо? Где об этом почитать можно?

Но ведь в винде можно просто открыть "Мой Компьютер" и увидеть всю эту информацию.

Размеры и загруженность дисков в Win10, даже сетевых.
Размеры и загруженность дисков в Win10, даже сетевых.

Спасибо большое, добавил в статью.

Кстати, не подскажете как добавить Plex в список сетевых локаций? И зачем? У меня диски от NAS подмонтированы как обычные сетевые диски. Обычно видео если хочу скачать/закачать/изменить - то пользуюсь ими.

На всякий случай, не знаю как там в других ОС, в 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: бла-бла-бла скачать в Интернете"

Абсолютно верно. А те, которые не умеют, могут вызвать какой-нибудь MessageBox.

Исходники CivetWebView открыты, дописать логику можно. Вопрос стоит ли тратить на это время? Я пока так и не получил ответов на вопросы, заданные в конце статьи.

Интересно то, что ALFIS, использующий WebView, в винде ничего не просит. Ни разу никто не обращался по этому поводу.

Раньше используемая им обёртка над webview умела использовать MSHTML и Edge, а сейчас, похоже, разучилась.

И сейчас умеет. Именно то же самое WebView встроено в героя данной публикации.

Я не сишник, но позволю себе усомниться в том, что в героя версия с поддержкой MSHTML )

В версии 0.1.1 были следы MSHTML и EdgeHTML (раз, два), а в мастере ничего похожего не заметил, зато вижу WebView2.

ALFIS же использует, насколько понимаю, Boscop/web-view версии 0.7.3 и он похож на независимый порт с легко заметными файлами webview_mshtml.c и webview_edge.cpp и никаких следов нового WebView2.

В Linux я часто пользуюсь утилитой df. Мне её очень не хватает в Windows, а искать аналоги лень.

Get-Volume вас спасёт

Спасибо большое, добавил в статью.

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. Да и с системой очень плотно связан, можно и список дисков получить без перебора и реестр прочитать...

Кстати диски не обязательно к буквам привязаны, их ещё можно в папки монтировать.

Это если вы знаете и то, и другое...

Но тогда это не попадёт под хаб "Ненормальное программирование"....

PHP и так из коробки (начиная с 7.4+) умеет в WinForms и так же можно и список дисков получить и реестр прочитать (последнее сложнее, т.к. АПИ у него довольно помоечное).

подозреваю, что если обратиться к диску A: при существующем флоппи-драйве, то можно и подвиснуть

С оптическим диском тоже может быть весело.

Остался всего один шаг до веб приложения. Почему бы его не сделать? Пусть остается портативный сервер и обычный браузер. Тем более, браузеры сейчас есть во всем, что имеет экран. А иногда даже и там, где нет экрана.

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

А что если сервер будет сам открывать окно браузера, а при закрытии окна браузера сервер будет автоматически выключаться?

Звучит хорошо. Но сложнореализуемо. В браузере часто открыто много вкладок, и о закрытии конкретной он систему не информирует, насколько мне известно.
Ещё можно например пинговать сервер каждую секунду. И убивать сервер по таймауту если ничего не пришло. Тоже так себе решение - браузер вполне может отправить вкладку в сяпщий режим.

Можно что угодно использовать с поддержкой соединения: long polling, web sockets и т.д.

А long polling или web sockets и т.д. работают пока вкладка находится в Sleep mode?

Если вы имеете в виду, работает ли web sockets когда вкладка неактивна, то да, работает. Если же речь про Google Chrome sleeping tab option, то эта опция по умолчанию выключена. На мой взгляд, если пользователь достаточно продвинут, чтобы включить эту опцию, то со вкладками он точно разберется. А у остальных все должно будет просто работать. Но на 100% я не уверен, нужно пробовать.

Worker затычку сделать для пинга сервера. И сделать эту затычку обязательным файлом наподобии как манифест для PWA.

Не совсем понял, что это такое. В конце получается портативное приложение, не зависящее ни от чего? Или нужно устанавливать что-то в систему? 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-е является типовым паттерном построения интерфейса.

... а получилось обсуждение того, что не стоит делать :)

А как сейчас в винде с .hta приложениями?

Ещё работают, но MS уже лет 7 демонстрирует нежелание развивать или продвигать это своё интересное решение.

Спасибо. Очень хороший проект. У него есть своя сфера. Программы для тонких клиентов: например экраны заказа в ресторанах, терминалы обслуживания.

Если у компании облако на сервере написан на 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Кб и ей не нужно вообще ничего.

Код программы помещается на один экран.

Классно! Это и есть правильный путь - написать утилиту на подоходящем для данной задачи языке. Только с этим подходом есть как минимум одна проблема - не попадает под хаб "ненормальное программирование" :-)

Sign up to leave a comment.

Articles