MySQL بهعنوان یک سرویس ویندوز نصب شده بود، که یعنی چه بخواهم آن جلسه واقعاً به یک پایگاهداده دست بزنم چه نه، خودکار در بوت استارت میشد — یک فرآیند پسزمینهی دیگر روی ماشینی که از قبل بهاندازهی کافی از آنها حمل میکرد.
چالش: سریع و بیدردسر کردن دیدن اینکه آیا MySQL در حال اجراست و خاموش کردنش، تا ویندوز یک چیز کمتر برای استارت خودکار داشته باشد و وسوسه نشوم که فقط از سر ناراحتی روشن نگهش دارم.
راه دستی، خودِ مشکل بود
خاموش کردنش یعنی باز کردن Run، تایپ services.msc، انتظار برای بارگذاری فهرست الفبایی کامل هر سرویس ویندوز، اسکرول برای پیدا کردن هر ورودی MySQL که این ماشین داشت، راستکلیک، Stop، تأیید پرامپت UAC — بعد انجام همان کار برعکس دفعهی بعدی که واقعاً به پایگاهداده نیاز داشتم. اصطکاک کوچک، تکرارشده هر روز، و کل هدف کم کردن سربار بود — پس خود راهحل نمیتوانست چیز سنگینتری برای اجرا باشد.
چرا یک اپلیکیشن تری بومی در Rust
همان بخش آخر، میانبرهای بدیهی را کنار گذاشت. یک اپلیکیشن تری مبتنی بر Electron یعنی حمل یک رانتایم کامل Chromium فقط برای نمایش یک آیکون رنگی — که کل فرض سبکتر کردن سیستم را زیر سؤال میبرد. بهجایش آن را در Rust ساختم: tray-icon و winit برای آیکون و حلقهی رویداد، windows-service برای صحبت مستقیم با Windows Service Control Manager — همان رابطی که services.msc استفاده میکند، فقط بدون پنجرهی دورش — و windows-sys برای بخشهای خام Win32 زیرین. پروفایل ریلیز هم بهشدت تنظیم شده: بهینهسازی زمان لینک، یک واحد codegen، حذف نمادها، panic = "abort" — کوچکترین و سریعترین باینری که منطقاً میتوانست باشد.
وضعیت با یک نگاه، کنترل با یک کلیک
خود آیکون تری وضعیت را حمل میکند — نیازی به باز کردن هیچچیزی برای دانستن حالت نیست. سرویس را با یک بازهی زمانی پول میکند و رنگ عوض میکند: سبز برای در حال اجرا، قرمز برای متوقف، کهربایی هنگام تغییر حالت، آبی برای مکث، خاکستری اگر سرویس اصلاً پیدا نشود.

کلیک چپ یا راست روی آیکون، و منوی واقعی وضعیت فعلی را با نام نشان میدهد، بعد Running، Stopped، و Restart MySQL درست زیرش — بهعلاوه چند میانبر که بیسروصدا حلقه را میبندند: Open Windows Services برای آن لحظهی کمیاب که خود services.msc هنوز چیزی است که لازم دارید، و Star this project on GitHub برای هرکسی که بخواهد این را بگوید.

فقط وقتی واقعاً اهمیت دارد درخواست ادمین بده
استارت یا استاپ یک سرویس ویندوز به دسترسی بالا نیاز دارد — اما اجرای کل اپلیکیشن تری بهعنوان administrator در تمام مدت، یک دردسر را با دردسر بدتری معامله میکرد. بهجایش خود اپلیکیشن بدون امتیاز اجرا میشود، و ویندوز فقط برای همان لحظهی تکی که استارت، استاپ یا ریستارت واقعاً درخواست میشود یک پرامپت UAC نشان میدهد. هرچیز دیگر — خواندن وضعیت، نمایش منو — به هیچ چیز اضافهای نیاز ندارد.
قابلفراموششدنش کردن
در اولین اجرا، خودش نامهای رایج سرویس را بررسی میکند — MySQL84، MySQL80، MariaDB، wampmysqld64، و چند مورد دیگر — و فقط اولی که پیدا میکند را انتخاب میکند. برای هرچیز دیگر، یک خط در یک فایل سادهی .ini زیر %APPDATA% آن را به نام سرویس درست هدایت میکند. یک سوییچ اختیاری start with Windows یعنی از همان بوت آنجاست، تنها کار نشان دادن وضعیت را انجام میدهد، بدون درخواست هیچ توجه دیگری فراتر از آن.

نتیجهی نهایی
MySQL دیگر یک راز پسزمینهای نبود. یک نگاه به تری میگوید آیا در حال اجراست، و خاموش کردنش یک کلیک و یک پرامپت UAC است بهجای یک سفر از میان services.msc — از باینریای که کل ردپایش برعکس همان مشکل «فرآیند پسزمینهی سنگین» است که برای حلش وجود دارد. بهعنوان یک محصول متنباز روی pumpkins.ir منتشر شد، با ریلیزهایی که روی گیتهاب منتشر میشوند.
چه چیزی از این تجربه یاد گرفتم
- اگر کار یک ابزار سبک کردن یک سیستم است، ردپای خودش قابلمذاکره نیست — وقتی کوچک و سریع نیاز واقعی است، نه صرفاً یک ترجیح، سراغ بومی (Rust، در این مورد) بروید نه یک استک با رانتایم بستهبندیشده.
- فقط همان اقدام دقیقی که نیاز دارد را بالا ببرید، نه کل اپلیکیشن دورش را — یک پرامپت UAC روی «سرویس را متوقف کن»، نه روی «این آیکون تری را تمام روز اجرا کن».
- ابزاری که قرار است در پسزمینه محو شود، این را با نیاز به کمترین توجه ممکن بهدست میآورد — یک رنگ آیکون و یک سوییچ استارتاپ، برای این کار، از یک داشبورد بهتر است.