الانتقال إلى المحتوى

مثبّت Windows لتطبيق Go أو Rust (مترجَم من أي نظام تشغيل)

ترجم برنامج Go أو Rust لنظام Windows من أي نظام تشغيل، وضمّن أيقونة، وأخفِ نافذة الطرفية في التطبيقات الرسومية، وغلّف ملف .exe الواحد (مع أي موارد) في Setup.exe مع اختصارات وأداة إلغاء تثبيت.

آخر تحديث 31 أكتوبر 2026 · 3 دقائق قراءة

يُنتج كل من Go وRust ملف .exe واحدًا ثابت الربط لنظام Windows من جهاز Mac أو Linux، وهذا جزء كبير من جاذبيتهما لأدوات سطح المكتب. ومع ذلك، ما زال المستخدمون يتوقعون تثبيت ذلك الملف .exe بدلًا من إبقائه في مجلد التنزيلات. يستعرض هذا الدليل خيارات البناء المهمة وكيفية تحويل الملف الثنائي إلى Setup.exe من دون لمس Windows حتى يحين وقت الاختبار.

Go

قم بالترجمة المتقاطعة مع تحديد الهدف في متغيرات البيئة:

GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o MyApp.exe .
  • يزيل الخيار -s -w جداول الرموز ومعلومات التنقيح، ما يقلّص حجم الملف الثنائي.
  • للتطبيقات الرسومية (Fyne أو Wails أو Walk أو webview)، أضف -H windowsgui داخل -ldflags حتى لا تُفتح نافذة طرفية: -ldflags "-s -w -H windowsgui".
  • اضبط GOARCH=386 لبناء 32 بت، وarm64 لنظام Windows على ARM.

الأيقونة ومعلومات الإصدار. لا تملك Go طريقة مدمجة لتضمين أيقونة Windows. تُولّد أداة go-winres ملف موارد .syso من وصف JSON صغير وملف .ico الخاص بك؛ ضع ملف .syso في الحزمة وسيلتقطه go build تلقائيًا. من دونه، يعرض الملف .exe الأيقونة العامة، لكن اختصارات المثبّت ستستخدم مع ذلك الأيقونة التي ترفعها.

Rust

على Windows، يعمل الهدف الافتراضي:

cargo build --release

من macOS أو Linux، استهدف سلسلة أدوات GNU، التي تقوم بالترجمة المتقاطعة عند تثبيت MinGW:

rustup target add x86_64-pc-windows-gnu
cargo build --release --target x86_64-pc-windows-gnu

تمثّل cargo-xwin بديلًا يقوم بالترجمة المتقاطعة لهدف MSVC.

  • للتطبيقات الرسومية، أضف #![windows_subsystem = "windows"] في أعلى main.rs لإخفاء نافذة الطرفية.
  • لتضمين أيقونة ومعلومات الإصدار، استخدم crate باسم winres أو embed-resource من build.rs مع ملف .rc يشير إلى app.ico.
  • اضبط opt-level = "z" وlto = true وstrip = true في ملف تعريف release للحصول على ملف ثنائي أصغر.

ما الذي ترفعه

ملف .exe واحد: ارفعه مباشرة إلى ExeTup؛ لا حاجة إلى ملف zip. يمنحه المثبّت مكانًا في Program Files (أو في مجلد المستخدم) مع اختصارات وأداة إلغاء تثبيت.

ملف .exe مع موارد (قالب إعدادات، أو موارد ويب لتطبيق webview، أو مجلد data/): اضغطها معًا في ملف zip بهيكل المجلدات الذي يتوقعه البرنامج أثناء التشغيل، ثم ارفع ملف zip. بدلًا من ذلك، ارفع الملف .exe وأضف الملفات الإضافية في خطوة «ملفات أخرى»؛ في الحالتين تُوضع بجوار البرنامج.

ثم أدخل الاسم والإصدار والناشر، واختر نطاق التثبيت والمعمارية، وارفع ملف .ico، وابدأ البناء. اختبر النتيجة على Windows؛ راجع خيارات الاختبار من دون جهاز Windows.

أدوات سطر الأوامر

صُممت المثبّتات لتطبيقات سطح المكتب، لكن أدوات سطر الأوامر تستفيد منها أيضًا: موقع معروف، وإدخال لإلغاء التثبيت، ونشر صامت باستخدام /S لفرق تقنية المعلومات. تنبيهان:

  • لا يضيف المثبّت المجلد إلى PATH. أخبر المستخدمين بمجلد التثبيت، أو اجعل الأداة تعرض إضافة نفسها عند التشغيل الأول.
  • تُوضع التثبيتات الخاصة بالمستخدم في %LOCALAPPDATA%\Programs\MyApp، وهو مسار يمكن للمستخدمين الوصول إليه من دون صلاحيات المسؤول.

للأدوات الموجهة إلى المطورين، قد تناسب ملفات التعريف (manifests) الخاصة بـ winget أو scoop جمهورك أكثر من المثبّت؛ ويمكنها الإشارة إلى الملف .exe الموقّع نفسه.

ملاحظات

  • الاستدلال في برامج مكافحة الفيروسات. الملفات الثنائية الحديثة غير الموقّعة وثابتة الربط من Go وRust تُطلق أحيانًا إنذارات الماسحات الاستدلالية. المثبّت الذي يضع البرنامج في Program Files يساعد قليلًا؛ أما توقيع الكود فيساعد كثيرًا. راجع دليل SmartScreen.
  • لا بيئة تشغيل ولا متطلبات مسبقة. تربط كلتا اللغتين بيئة التشغيل داخل الملف الثنائي. يوزّع المثبّت الملف الثنائي كما هو.
  • التحديثات. يستبدل المثبّت الجديد ذو رقم الإصدار الأعلى الملفات في مكانها.

الأسئلة الشائعة

هل يمكنني رفع ملف .exe فقط؟

نعم. يُقبل ملف .exe واحد بمفرده، ويوفّر المثبّت مع ذلك الاختصارات وأداة إلغاء التثبيت والإدخال في إعدادات Windows.

هل أحتاج إلى Windows لبناء المثبّت؟

لا. ابنِ الملف الثنائي على نظام التشغيل الخاص بك وارفعه، وسيترجم ExeTup المثبّت في السحابة. لا يلزم Windows إلا لاختبار النتيجة.

لماذا يفتح تطبيق Go الرسومي الخاص بي نافذة طرفية سوداء؟

ابنِ باستخدام -ldflags "-H windowsgui". في Rust، أضف #![windows_subsystem = "windows"] إلى main.rs.

كيف أضع أيقونتي على ملف .exe نفسه؟

ضمّنها كمورد Windows: go-winres لـ Go، وcrate باسم winres أو embed-resource لـ Rust. ارفع ملف .ico نفسه في ExeTup للمثبّت والاختصارات.

أدلة ذات صلة