На чём мне написать десктопное приложение?
============================================

 Мне нужно написать десктопное приложение, но не могу определиться со средой разработки.   

Сейчас речь не о моих навыках, а нужен вообще лишь совет, на чём лучше писать.  

  

У программы будет несколько задач, которые веб-приложениями думаю сложно реализовать, хотя может и возможно.  

1. Оффлайн режим. То есть подразумевается работа даже без интернета, но при подключении его можно будет синхронизировать данные о файлах в папках рядом с программой.  

2. Проверка наличия конкретных файлов в папках, определение их MD5 сумм, сравнение их с версией в онлайне.  

3. Скачивание недостающих файлов в указанную папку.  

4. Немного нестандартный GUI, в частности нужны ListBox'ы с иконками и чекбоксами.  

5. Обновление базы об этих файлах. В формате SQL или отдельный XML файл, хз.  

6. Поддержка Windows XP/7/8/10 x32/x64. 

 Каждый будет советовать то, что ему ближе по духу. Я бы например использовал Qt. Если у вас есть временные рамки и недостаточно знаний и практики, можно взять Lazarus (Free Pascal). Да-да-да!!! Оно еще живое! Имеет кучу возможностей, огромную поддержку платформ, можно довольно быстро решить поставленную задачу. 

 C# + WPF/WinForms 

 Delphi по всем пунктам подходит. Помимо этого, замечу, что XP всё ещё поддерживается в Delphi. А также, приложение будет состоять из одного файла ~10-15мб и не будет требовать ни каких сторонних библиотек или ОС зависимостей.  

  

Среда разработки бесплатная для не коммерческого использования RAD Studio CE 10.3. Качается с оф. сайта.  

  

Можно написать и мобильную версию. Если точнее, то одно приложение можно собрать под все платформы, если писать с FMX (фреймворк из коробки).  

  

"ListBox с иконками" - это стандартный GUI, не стандартный - это, например, список из кастомных элементов, в которых есть кнопки, картинки, другие списки и тд. Всё это легко реализуется в Delphi 

 Конечно же C#.  

  

p.s.  

Но если очень хочется, то можно писать на любом другом языке. 

 Я бы посоветовал вообще разделить функционал и GUI.  

Весь функционал обернул бы в class library (dll), а gui уже потом просто дописал бы к этой либе.  

А писать - да, на чём угодно.   

Если XP, то C# + WinForms.   

Без XP можно WPF (с ним удобно реализовать это):  

> Немного нестандартный GUI, в частности нужны ListBox'ы с иконками и чекбоксами.

  

На винформах тоже можно, но трудозатрат побольше.  

  

Ну и экзотический вариант (но не без шарма) - сделать гуй на html + css, а само приложение может реализовывать простейший веб-сервер (ну отдать по запросу html-файлик get-ом и принять инфу post-ом) - зато вообще практически без платформенных зависимостей. 

 На чем умейте, на том и пишите. Даже на php при большом желании можно сделать нативное приложение, способное работать без интернета. 

 Electron + net core   

  

У программы будет несколько задач, которые веб-приложениями думаю сложно реализовать, хотя может и возможно.  

> 1. Оффлайн режим. То есть подразумевается работа даже без интернета, но при подключении его можно будет синхронизировать данные о файлах в папках рядом с программой.  
> 
> 

  

Как напишите, net core часть будет просто подсоединятся к вашему серверу  

  

> 2. Проверка наличия конкретных файлов в папках, определение их MD5 сумм, сравнение их с версией в онлайне.

  

  

net core часть  

  

3. Скачивание недостающих файлов в указанную папку.  

> 4. Немного нестандартный GUI, в частности нужны ListBox'ы с иконками и чекбоксами.

  

  

Все что вам угодно  

  

> 5. Обновление базы об этих файлах. В формате SQL или отдельный XML файл, хз.

  

Я бы рекомендовал EFcore + sqlite  

  

> 6. Поддержка Windows XP/7/8/10 x32/x64.

  

  

выкиньте XP  

  

[https://github.com/dotnet/core/blob/main/release-n...](https://github.com/dotnet/core/blob/main/release-notes/3.0/3.0-supported-os.md)  

  

То же самое только на winforms + .NET Framework 4  

Поддерживается XP  

Добавьте какие нибудь компоненты типа Telerik 

 Go + gotk3, python + pygtk в список вариантов можно добавить 

 Java 

 Конечно же C#... Если хотите, то можно еще C++ или даже Delph/Pascal