Значок: icon.ico вшивается в exe

csc собирался без /win32icon, поэтому у exe не было значка вовсе, а окно
пыталось сделать значок из icon.png через GetHicon — тот теряет альфу
и не даёт нужных размеров. Теперь многоразмерный icon.ico вшит в exe,
а окно берёт значок из себя же.
This commit is contained in:
Alex Cube
2026-08-26 16:51:47 +03:00
parent 46ea8a9296
commit 9e25f4de5d
4 changed files with 9 additions and 9 deletions
+3 -1
View File
@@ -178,6 +178,8 @@ deepseek-api.exe
`build.cmd` собирает `deepseek-api.exe` (около 20 КБ) компилятором C# из
состава Windows — `csc.exe`, он есть на любой машине с .NET Framework 4.
Значок берётся из `icon.ico` и вшивается в exe, так что рядом с ним ничего
лежать не обязано.
Ставить ничего не нужно, прав администратора тоже. Сам `.exe` в репозиторий
не кладётся: собирается за секунду.
@@ -467,7 +469,7 @@ POST /api/chat
| `config.json` | настройки; `config.local.json` рядом перебивает их |
| `chats.json` | рабочее состояние: id живых чатов (заводится сам) |
| `start.cmd` | запуск в консоли |
| `tray.cs`, `build.cmd` | окно с индикатором в трее; `.exe` собирается на месте |
| `tray.cs`, `build.cmd`, `icon.ico` | окно с индикатором в трее; `.exe` собирается на месте |
| `test.mjs` | проверка перевода формата, браузер не нужен |
Зависимостей нет — только то, что есть в Node 22.
+1
View File
@@ -9,6 +9,7 @@ if not exist "%CSC%" (
exit /b 1
)
"%CSC%" /nologo /target:winexe /optimize+ /out:"%~dp0deepseek-api.exe" ^
/win32icon:"%~dp0icon.ico" ^
/r:System.dll /r:System.Drawing.dll /r:System.Windows.Forms.dll ^
/r:System.Web.Extensions.dll "%~dp0tray.cs"
if errorlevel 1 exit /b 1
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

+5 -8
View File
@@ -78,14 +78,11 @@ class Tray : Form
tray.Visible = true;
tray.DoubleClick += (s, e) => Restore();
// Значок окна — картинка проекта, если она рядом; значок в трее всё
// равно рисуется цветом состояния, там картинке места нет.
var png = Path.Combine(here, "icon.png");
if (File.Exists(png))
try { using (var bmp = new Bitmap(png)) Icon = Icon.FromHandle(bmp.GetHicon()); }
catch { Icon = Dot(Color.Gray); }
else
Icon = Dot(Color.Gray);
// Значок окна берём из самого exe: icon.ico вшит в него при сборке
// (/win32icon), поэтому рядом ничего лежать не обязано. Значок в трее
// всё равно рисуется цветом состояния, там картинке места нет.
try { Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath); }
catch { Icon = Dot(Color.Gray); }
Mark(Color.Gray, "запуск…");
poll.Interval = 1000;