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

إنشاء مثبّت Windows على Mac أو Linux

خياراتك لبناء Setup.exe عندما تطوّر على macOS أو Linux، من التصريف المتقاطع عبر NSIS إلى بناء يتم بالكامل في المتصفح، وكيف تختبر النتيجة دون امتلاك حاسوب Windows.

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

كثير من تطبيقات Windows تُطوَّر على أجهزة Mac: تطبيقات Electron وTauri، وأدوات Python، والألعاب، وملفات Go وRust الثنائية المصرَّفة تصريفًا متقاطعًا. يُبنى التطبيق دون مشكلة؛ أما المثبّت فهو ما يتعثر عنده الناس، لأن أدوات إنشاء المثبّتات التقليدية تفترض وجود جهاز Windows. إليك الطرق للالتفاف على ذلك، وكيف تختبر المثبّت عندما لا يكون Windows في متناولك.

الخيار 1: بناء المثبّت في المتصفح

يبني ExeTup ملف Setup.exe في السحابة. من جهاز Mac أو سطح مكتب Linux:

  1. أنتج نسخة Windows من تطبيقك، بحيث يحتوي مجلد واحد على MyApp.exe وملفاته. تنتج ذلك أدوات مثل Electron Packager، وPyInstaller (يُشغَّل على Windows أو داخل جهاز Windows افتراضي، لأن PyInstaller لا يدعم التصريف المتقاطع)، وGOOS=windows go build، وcargo build --target x86_64-pc-windows-gnu وما شابهها.
  2. اضغط المجلد في ملف .zip وارفعه.
  3. املأ الاسم والإصدار والناشر ونطاق التثبيت والاختصارات واللغات. أضف ملف .ico.
  4. ابنِ المثبّت ونزّل Setup.exe.

لا يُثبَّت شيء على جهازك ولا يوجد أي سكربت. راجع كيف تصنع Setup.exe لتفاصيل الخيارات.

الخيار 2: تصريف NSIS محليًا

يعمل مصرّف NSIS على macOS وLinux:

brew install makensis        # macOS
sudo apt install nsis        # Debian, Ubuntu
makensis installer.nsi

تكتب سكربت .nsi بنفسك (راجع مثبّت NSIS عبر الإنترنت لمعرفة ما يتطلبه ذلك). المثبّت الناتج مطابق لما يُصرَّف على Windows. هذا هو الخيار الصحيح عندما تريد أن يكون البناء بالكامل داخل نظام التكامل المستمر الخاص بك ولا تمانع صيانة السكربت.

الخيار 3: Inno Setup تحت Wine

Inno Setup متاح لـ Windows فقط، لكن مصرّفه يعمل تحت Wine. ثبّت Wine، وشغّل مثبّت Inno Setup داخله، ثم استدعِ ISCC.exe عبر Wine من سكربت البناء لديك. الطريقة تعمل وبعض المشاريع تُنشر بها؛ توقّع بعض المتاعب مع المسارات والخطوط. راجع بديل Inno Setup للمقارنة.

الخيار 4: بناء على Windows في التكامل المستمر

توفر GitHub Actions وGitLab وAzure Pipelines جميعها مشغّلات Windows. ابنِ التطبيق والمثبّت هناك، مع تثبيت NSIS أو Inno Setup في خطوة إعداد، ثم نزّل المخرجات. مناسب للفرق التي لديها خط إصدار؛ ثقيل على مطوّر منفرد ينشر أداة صغيرة.

إنشاء ملف .ico على Mac

أيقونات Windows هي ملفات .ico تحتوي على عدة أحجام. من صورة PNG بحجم 256×256:

brew install imagemagick
magick icon.png -define icon:auto-resize=256,128,64,48,32,16 icon.ico

استخدم الملف نفسه للملف التنفيذي للتطبيق (خيار --icon في Electron Packager، وخيار --icon في PyInstaller) وللمثبّت.

الاختبار دون حاسوب Windows

ينبغي أن تشغّل المثبّت مرة واحدة على الأقل قبل النشر. الخيارات، بترتيب الجهد تقريبًا:

  • جهاز Windows افتراضي. على Apple silicon، يشغّل UTM أو Parallels مع Windows 11 ARM تطبيقات x64 عبر المحاكاة بشكل كافٍ لاختبار التثبيت. يعمل VirtualBox وVMware على أجهزة Mac بمعالجات Intel وعلى Linux. يسمح ترخيص Microsoft بعمليات تثبيت تقييمية لأغراض الاختبار.
  • سطح مكتب Windows سحابي. Windows 365 أو Azure Virtual Desktop أو جهاز Windows افتراضي من أي مزوّد، بالساعة.
  • جهاز زميل أو عميل، للفحص النهائي: شغّل المثبّت، وافتح التطبيق من قائمة ابدأ، ثم ألغِ التثبيت من إعدادات Windows.

يمكن لـ Wine على macOS تشغيل بعض تطبيقات Windows، لكنه ليس وسيلة موثوقة للحكم على مثبّت.

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

هل يمكنني بناء تطبيق Windows نفسه على Mac؟

غالبًا. يمكن لـ Electron وTauri وGo وRust و.NET استهداف Windows من macOS. أما PyInstaller فلا يدعم التصريف المتقاطع، لذا جمّد تطبيقات Python على Windows أو داخل جهاز Windows افتراضي، ثم ابنِ المثبّت من المجلد الذي ينتجه.

هل أحتاج إلى Wine أو جهاز افتراضي لاستخدام ExeTup؟

لا. يجري البناء في السحابة وتُنزَّل النتيجة في متصفحك. الجهاز الافتراضي مفيد فقط لاختبار المثبّت بعد ذلك.

هل يتصرف مثبّت مصرَّف على Mac بشكل مختلف على Windows؟

لا. مثبّت NSIS المصرَّف بـ makensis على macOS مكافئ بايتًا ببايت لما يُصرَّف على Windows، وبناء ExeTup السحابي يستخدم المصرّف نفسه.

كيف أوقّع المثبّت من Mac؟

يتطلب توقيع الكود بـ signtool نظام Windows، لكن osslsigncode يوقّع ملفات Windows التنفيذية على macOS وLinux بالشهادة نفسها. راجع دليل SmartScreen لمعرفة سبب أهمية التوقيع.

أدلة ذات صلة