איך בוחרים שיטת הפצה לאפליקציית Windows: MSI, MSIX, ClickOnce, xcopy ו-updater עצמאי

· עודכן בתאריך: · · Windows, הפצה, MSI, MSIX, ClickOnce, xcopy, updater

היסטוריית עדכונים (גרסה ראשונה, פורסמה בתאריך 20 Mar 2026)
פרסום ראשון
לצטט את המאמר הזה(DOI: 10.5281/zenodo.22173678)

מאמר זה מאוחסן בארכיון Zenodo. להלן גם ה-DOI שתמיד מפנה לגרסה האחרונה וגם ה-DOI המקובע לגרסה שאתם קוראים.

Go Komura (2026). איך בוחרים שיטת הפצה לאפליקציית Windows: MSI, MSIX, ClickOnce, xcopy ו-updater עצמאי. KomuraSoft LLC. https://doi.org/10.5281/zenodo.22173678 https://comcomponent.com/he/blog/windows-app-deployment-msi-msix-clickonce-xcopy-custom-updater/

DOI (הגרסה האחרונה)
10.5281/zenodo.22173678
DOI (הגרסה הזו)
10.5281/zenodo.22173679

הורדת גיליון עבודה להחלטה ב-Excel, עם גיליון ביפנית ובאנגלית

כשמחליטים על שיטת הפצה לאפליקציית Windows, השיחה נוטה להתחיל מ”מה חדש יותר” או “מה קל יותר”. בפועל, הציר שמשפיע הוא אחר.

  • רוצים להתקין למשתמש בודד, או למכונה כולה
  • רוצים להשאיר עדכונים לתשתית ההפצה, או לקחת אותם על עצמכם
  • יש אינטגרציה ל-OS כמו שירות / מנהל התקן / Shell extension / רישום COM
  • צריך לעמוד בהפצה ברשת סגורה, offline, או USB
  • צריך package identity, או רוצים לרוץ unrestricted כ-Win32 רגיל

בחירת שיטת הפצה היא לא העדפה לצורת installer, אלא בחירה של כמה עמוק נוגעים ב-OS ושל מי נושא באחריות העדכון.

שני הצירים שמכריעים שיטת הפצהבחירת שיטת הפצה היא לא העדפה לצורת installer לפי מה חדש או קל, אלא בחירה בשני צירים: כמה עמוק נוגעים ב-OS, ומי נושא באחריות העדכון.מה חדש יותר, מה קל יותרלא זה הציר שמכריעכמה עמוק נוגעים ב-OSשיטת ההפצה נקבעתמי נושא באחריות העדכון

איור 1: שיטת הפצה נקבעת לפי רמת הצימוד ל-OS ולפי אחריות העדכון, לא לפי טעם.

המאמר מיועד למפתחים שבונים אפליקציית שולחן עבודה ל-Windows ועכשיו בוחרים שיטת הפצה, או בודקים מחדש את השיטה הקיימת, ולאנשי מערכות שקולטים את התפעול. הוא לא מניח שפה או framework מסוימים. בתחום הזה הרבה מונחים רצים באנגלית, ולכן הם מרוכזים ב-1.1. תוכן גיליון העבודה שבראש המאמר מסוכם ב-1.2.

1. קודם המסקנה

בגסות, אבל בצורה שאפשר לעבוד איתה:

  • אם מכניסים לכל המכונה, יש שירות או רישום COM, או מתקינים prerequisites — מתחילים מ-MSI
  • אם מניחים Windows 10/11 ורוצים clean install / clean uninstall, עדכונים תכופים, ו-package identity — MSIX הוא מועמד חזק
  • אם רוצים להפיץ בקלות אפליקציית שולחן עבודה פנימית ב-.NET, per-user, עם עדכון אוטומטי — ClickOnce עדיין חזק
  • אם העדיפות היא כלי שרץ אחרי ששמים אותו, רשת סגורה, USB, בלי הרשאות admin — xcopy הוא הכי ישיר
  • אם רוצים להחזיק ביד UX עדכון, ערוצים, הפצה מדורגת, telemetry ואסטרטגיית שחזור — זה updater עצמאי
  • אם צריך מנהל התקן — בטוח יותר לא לבנות את זה סביב MSIX מההתחלה
  • אם צריך in-process Shell extension ב-Explorer — קודם בודקים את הטווח ש-MSIX תומך בו ואת תנאי גרסת ה-OS

בסיכום גס:

  1. רישום עמוק ב-OS → לכיוון MSI
  2. רוצים package identity ו-modern packaging → MSIX
  3. הפצה קלה per-user עם עדכון built-in → ClickOnce
  4. העדיפות היא לשים ולרוץ → xcopy
  5. יש נכונות לתכנן ולהריץ תשתית עדכון בעצמכם → updater עצמאי
סיכום גס של חמש השיטותרישום עמוק ב-OS מוביל ל-MSI; package identity ו-modern packaging ל-MSIX; הפצה קלה per-user עם עדכון built-in ל-ClickOnce; לשים ולרוץ ל-xcopy; נכונות להחזיק תשתית עדכון מובילה ל-updater עצמאי.כןלאכןלאכןלשים ולרוץ בעדיפותרישום עמוק ב-OS?לכיוון MSIרוצים package identity?MSIXהפצה קלה per-user עם עדכון אוטומטי?ClickOncexcopyאם מוכנים להחזיק תשתית עדכון, updater עצמאי

איור 2: כשמסתבכים, מפרידים לפי עומק הרישום, identity, וקלות ההפצה.

1.1 מונחים שמופיעים בגוף המאמר

סביב הפצה הרבה מונחים רצים באנגלית, אז קודם הרשימה.

מונח בעברית בקצרה משמעות
package identity מזהה חבילה מזהה ייחודי שה-OS נותן לאפליקציה ארוזה. בלי זה חלק מיכולות Windows לא זמינות
authoring כתיבת ה-installer העבודה של להגדיר את תוכן ה-MSI. קרוב ל”לכתוב MSI”
custom action פעולה מותאמת מנגנון להכניס קוד שלכם כשהפעולות הסטנדרטיות של ה-installer לא מספיקות
ARP רשימת האפליקציות קיצור של Add / Remove Programs. הרשימה ב”הגדרות” תחת אפליקציות מותקנות, או בלוח הבקרה תחת תוכניות ותכונות
clean install / clean uninstall התקנה / הסרה נקיות נכנס הכול בלי חורים, ובהסרה לא נשארים שאריות
repair תיקון החזרת התקנה שבורה למצב תקין דרך מנגנון ה-installer
telemetry מדידת שימוש איסוף הצלחת עדכונים ודפוסי שימוש
per-user / per-machine לפי משתמש / לפי מכונה רק למשתמש הזה, או משותף לכל המשתמשים
Shell extension הרחבת Explorer רכיב שנכנס ל-Explorer, למשל תפריט קליק ימני או תצוגת אייקון
unrestricted בלי הגבלות חבילה בלי מגבלות package, כ-Win32 רגיל עם גישה חופשית לקבצים ול-Registry
side-by-side דו-קיום כמה גרסאות על אותה מכונה במקביל
staged rollout הפצה מדורגת לא שולחים גרסה חדשה לכולם בבת אחת, אלא לפי אחוז

1.2 מה יש בגיליון העבודה שבראש המאמר

גיליון ה-Excel שבראש המאמר הוא כדי ליישם את ההחלטה של המאמר על המקרה שלכם ולתעד אותה. יש גרסה יפנית וגרסה אנגלית, כל אחת בשני גיליונות.

גיליון Planner מחולק לשלושה בלוקים.

  1. גיליון קלט: ממלאים 7 פריטים ואפשר לרשום מועמד ראשון ונימוק
    • היקף הפצה: per-user / per-machine / שניהם / לא ידוע
    • רכיבי אינטגרציה ל-OS: אין / שירות / מנהל התקן / Shell extension / רישום COM / כמה
    • package identity: נדרש / לא נדרש / אי אפשר להחליט
    • דרישת התקנה כמשתמש רגיל: חובה / לא נדרש / לפי תנאי
    • תדירות עדכון: ידני או נדיר / חודשי / שבועי / יותר מזה
    • סביבת יעד: רשת סגורה / offline / Windows חדש ומנוהל / Windows עם דורות מעורבים / USB ושטח
    • סוג אפליקציה: שולחן עבודה פנימי ב-.NET / מוצר מסחרי / כלי עזר / מעורב
  2. איך מבחינים בין מועמדים: לכל אחת מחמש השיטות, “מתי מסתכלים עליה קודם” ו”מתי קל לפסול אותה”
  3. זרימת ההחלטה: באיזה סדר עוברים על הפריטים, ולאן זה דוחף

גיליון Reference מחזיק כמו שהן את טבלת ההחלטה מפרק 3 ואת טבלת ההשוואה מפרק 4.

כלומר זה פרקים 3, 4 ו-7 של המאמר בצורה שאפשר למלא לכל מקרה. אם הקריאה לבד מספיקה להחלטה, אין צורך להוריד. שווה כשמשווים כמה מקרים, או כשרוצים להשאיר נימוק פנימי.

איך משתמשים בגיליון העבודהממלאים 7 פריטים בגיליון Planner, מצמצמים לפי הבחנה בין מועמדים וזרימת החלטה, ורושמים מועמד ראשון ונימוק; גיליון Reference הוא הטבלאות מפרקים 3 ו-4.ממלאים 7 פריטים בגיליון הקלטמצמצמים לפי הבחנה בין מועמדיםדוחפים לשיטה לפי זרימת ההחלטהרושמים מועמד ראשון ונימוקReference הוא הטבלאות מפרקים 3 ו-4

איור 3: הגיליון הופך את ההחלטה במאמר לתיעוד לפי מקרה.

ב-diagram, solid line מציינת relation שתמיד מתקיים ו-dashed line מציינת relation מותנה (התנאים מופיעים בהסבר של כל relation ב-detail page). הרשימה המלאה של ה-relations (סה”כ 17, כולל evidence ו-certainty) וההגדרות של ה-concepts המרכזיים נמצאות ב-detail page של ה-knowledge map (ביפנית). Data: JSON-LD / Turtle

2. חמש השיטות לא באותה זירה

זה חשוב מאוד.

MSI / MSIX / ClickOnce / xcopy הם בעיקר שיח על איך מכניסים. updater עצמאי הוא בעיקר שיח על איך נושאים באחריות העדכון.

בפועל קל יותר לחשוב על זה בשתי שכבות.

שכבה מועמדים עיקריים מה מחליטים
התקנה ראשונה MSI / MSIX / ClickOnce / xcopy לאן שמים, מה רושמים, הרשאות, הסרה
עדכון שוטף MSIX App Installer / ClickOnce / החלפה ידנית / updater עצמאי בדיקת עדכון, מקור הפצה, אימות חתימה, rollback, ערוצים, UI

בתרשים זה נראה כך. הקו המקווקו הוא “אמצעי העדכון שמתחבר באופן טבעי לשיטת ההתקנה הזו”.

אפליקציית Windows שרוצים להפיץקודם: איך מכניסיםשכבת התקנה ראשונהאחר כך: מי נושא באחריות העדכוןשכבת עדכון שוטףMSIMSIXClickOncexcopyMSIX App Installerעדכון built-in של ClickOnceהחלפה ידניתupdater עצמאי

איור 4: מודל שתי השכבות. הקו המקווקו הוא אמצעי עדכון שמתחבר באופן טבעי.

ב-ClickOnce וב-MSIX, ברגע שקובעים את השכבה העליונה כמעט נקבעת גם התחתונה. ב-MSI וב-xcopy צריך להחליט על השכבה התחתונה בנפרד. שאלת “איך מעדכנים” נשארת באוויר בעיקר כשבוחרים את שתי אלה.

לכן עדיף לחשוב ש-updater עצמאי הוא לא הבחירה הראשונה, אלא תוספת כששיטת ההפצה הקיימת לא מכסה את דרישת העדכון.

עדכון נשאר באוויר ב-MSI וב-xcopyב-ClickOnce וב-MSIX בחירת שיטת ההתקנה כמעט קובעת גם את אמצעי העדכון; ב-MSI וב-xcopy צריך להחליט בנפרד על שכבת העדכון השוטף, ו-updater עצמאי מתווסף כשהדרישה לא מכוסה.בוחרים ClickOnce / MSIXאמצעי העדכון כמעט נקבעבוחרים MSI / xcopyשאלת העדכון נשארת באווירמחליטים בנפרד על שכבת עדכון שוטףאם חסר, מוסיפים updater עצמאי

איור 5: updater עצמאי הוא לא אפשרות ראשונה, אלא מילוי חור בשכבת העדכון.

3. טבלת החלטה במבט אחד

קודם הטבלה הכי שימושית.

מצב מה בוחרים קודם למה
לכל המשתמשים, עם שירות, רישום COM, או הגדרות machine-wide MSI פחות תקלות כשעולים על הזירה של Windows Installer
מניחים Windows 10/11, רוצים clean install / uninstall, עדכונים תכופים, package identity MSIX קל יותר להתיישר ל-modern packaging ולמודל update
אפליקציה עסקית פנימית ב-.NET שרוצים להפיץ בקלות per-user ClickOnce מודל העדכון ה-built-in נוח
כלי שרץ אחרי ששמים אותו, רשת סגורה, USB, בלי הרשאות admin xcopy כמה שפחות מכניסים את מושג ה-install
מוצר מסחרי שרוצים להחזיק UX עדכון וערוצים ביד updater עצמאי יותר חופש ממודל עדכון built-in
צריך מנהל התקן לכיוון MSI או installer ייעודי חבילת מנהל התקן היא בעיה נפרדת, ו-MSIX לא מתאים
צריך in-process Shell extension לכיוון MSI או installer ייעודי מ-Windows 11 21H2 אפשר לרשום ב-MSIX גם legacy context menu handler, אבל צריך לבדוק תנאים

מה שחשוב בטבלה: עצם זה שיש עדכון לא אומר לקפוץ ל-updater עצמאי.

4. השוואה לפי זווית

זווית MSI MSIX ClickOnce xcopy updater עצמאי
קלות התקנה per-user ○ ○ ◎ ◎ ○
קלות התקנה per-machine ◎ ○ △ × ○
עדכון built-in △ ◎ ◎ × ◎
package identity × ◎ × × ×
התאמה לשירות ◎ △ × × ○
התאמה למנהל התקן △ × × × ○
התאמה ל-Shell extension ◎ △ × × ○
הפצה ברשת סגורה / offline ◎ ○ ○ ◎ ◎
עלות מימוש ותפעול ○ ○ ◎ ◎ ×
חופש ב-UX עדכון △ ○ △ × ◎

בטבלה הזו לא מחפשים מה הכי חזק, אלא איפה הכי פחות חיכוך.

5. לאיזה סוג מקרה כל שיטה מתאימה

5.1 MSI

MSI היא נקודת הייחוס כשרוצים אפליקציית שולחן עבודה מסורתית ב-Windows, עם install / uninstall / repair מסודרים.

היא מתאימה במיוחד למקרים כאלה.

  • אפליקציה עסקית לכל המשתמשים
  • אפליקציה שכוללת שירות Windows
  • אפליקציה עם רישום COM, file association, או הגדרות machine-wide
  • מוצר שכבר יש לו תפעול installer קיים

החוזק של MSI הוא שקל לבטא בסגנון של Windows איך האפליקציה נכנסה ל-OS.

גם החולשות ברורות.

  • authoring די קשה בשקט
  • upgrade / patch שמתוכננים בגסות מכאיבים אחר כך
  • ככל שמוסיפים custom action, זה נשבר יותר
  • במוצר עם עדכונים תכופים, UX העדכון נהיה כבד
החוזק והמחיר של MSIMSI קלה בביטוי איך האפליקציה נכנסה ל-OS בסגנון של Windows, אבל authoring קשה, ככל שמוסיפים custom action זה נשבר יותר, ובעדכונים תכופים UX העדכון נהיה כבד.MSIמבטאים בסגנון Windows איך נכנסים ל-OSיש install / uninstall / repairauthoring די קשה בשקטככל שמוסיפים custom action, זה נשבר יותר

איור 6: MSI נותנת כוח ביטוי לאינטגרציה עם ה-OS, ובתמורה נושאת קושי ב-authoring.

5.2 MSIX

MSIX היא הבחירה כשרוצים modern packaging ו-clean update / uninstall. היא גם משמעותית כשצריך יכולות Windows שדורשות package identity.

היא מתאימה בערך לזה.

  • אפליקציית שולחן עבודה שיכולה להניח Windows 10/11
  • אפליקציה עסקית עם תדירות עדכון די גבוהה
  • אפליקציה שרוצה יכולות Windows ש-package identity מפעיל
  • מקרה שרוצים להתיישר ל-Intune או App Installer

החוזק של MSIX הוא הניקיון של עדכון והסרה.

אבל לא הכול נכנס. במיוחד ארבע הנקודות האלה כדאי לבדוק בהתחלה.

  • in-process Shell extension (ב-MSIX מ-Windows 11 21H2 אפשר לרשום למשל legacy context menu handler, אבל צריך לבדוק הצהרת manifest ו-OS יעד)
  • driver
  • הנחות Win32 ישנות ו-unrestricted
  • מבנה שבו לא רוצים package identity

לארבע האלה יש מקורות בדיקה שונים. אל תעצרו ב”נשמע ש-MSIX לא מתאים”; כדאי לקבע מראש באיזה מסמך סוגרים את זה.

מה רוצים לבדוק איזה מסמך מה יוצא ממנו
מאיזו גרסת Windows זה זמין Microsoft Learn, “MSIX features and supported platforms” טבלת גרסאות OS לפי יכולת
אפשר לרשום in-process Shell extension Microsoft Learn, “Support legacy context menus for packaged apps” גרסת OS נתמכת ודרך ההצהרה ב-manifest
אפשר להפוך את ה-installer שלכם ל-MSIX Microsoft Learn, “Prepare to package a desktop application” ו-“Know your installer” רשימת מבנים שאי אפשר לארוז, ומה לבדוק מראש
מה קורה במבנה שכולל שירות Microsoft Learn, “Convert an installer that includes services” תנאים ומגבלות בהמרה שכוללת שירות

הקישורים בפרק 9. בהחלטה אל תסתפקו ב”נתמך או לא”; תגיעו עד “מאיזו גרסה, ובאיזו הצהרה זה נתמך”. בלי תנאי גרסת OS, מקבלים אחר כך “במכונת הבדיקה עבד, ב-Windows הישן בשטח לא נכנס”.

מגבלות MSIX סוגרים עד מקור הבדיקהארבע נקודות שמסתבכים בהן ב-MSIX, כמו Shell extension ו-driver, יושבות במסמכים שונים; לא עוצרים בנשמע לא מתאים, אלא בודקים מאיזו גרסה ובאיזו הצהרה זה נתמך, כדי לא לקבל עובד במכונת בדיקה ונכשל בשטח.ארבע נקודות שמסתבכים בהן ב-MSIXלא עוצרים בנשמע לא מתאיםקובעים באיזה מסמך סוגריםבודקים מאיזו גרסה ובאיזו הצהרהמונעים עובד במכונת בדיקה, נכשל בשטח

איור 7: מגבלות MSIX נסגרות רק אחרי תנאי גרסת OS ודרך ההצהרה.

5.3 ClickOnce

ClickOnce עדיין חזק כשרוצים אפליקציית שולחן עבודה פנימית ב-.NET, per-user, מהר, כולל עדכון.

הוא מתאים למצבים כאלה.

  • אפליקציה עסקית פנימית
  • רוצים להתקין כמשתמש רגיל
  • הפצה לפי משתמש מספיקה
  • לא רוצים לבנות UX עדכון לעומק

להפך, בטוח יותר לא לצפות ממנו מוצר שנוגע עמוק ב-OS, או תפקיד installer שאוסף כמה prerequisites.

5.4 xcopy

xcopy הוא deploy, לא install. אין רישום Registry, אין repair, אין package identity. בתמורה, אם מספיק לשים, זו הפשטות החזקה ביותר.

הוא זורח בכלים כאלה.

  • כלי אבחון
  • כלי הגדרת ציוד
  • כלי איסוף לוגים
  • כלי עזר שמוסרים בשטח על USB
  • מקרה שרוצים side-by-side של כמה גרסאות

החוזק של xcopy הוא שאופן הכשל מובן. מחליפים תיקייה; אם צריך לחזור, מחזירים את הגרסה הקודמת.

xcopy הוא deploy, לא installל-xcopy אין רישום Registry, repair או package identity, אבל אם מספיק לשים הוא רץ, מעדכנים בהחלפת תיקייה, וחוזרים בהחלפה לגרסה הקודמת; אופן הכשל מובן.שמים תיקייה שלמהרץ כמו שהואעדכון בהחלפת תיקייהחזרה בהחלפה לגרסה קודמתאין רישום, repair או identity

איור 8: הערך של xcopy הוא שהתקנה, עדכון וחזרה אחורה פשוטים.

כמובן יש גם חולשות.

  • Start menu / ARP / repair
  • file association / service / Shell extension / driver
  • עדכון built-in

5.5 updater עצמאי

updater עצמאי הוא פחות בחירת חופש ויותר בחירת אחריות.

שווה לשקול כשיש דרישות כאלה.

  • תדירות עדכון גבוהה
  • רוצים ערוצים כמו stable / beta / preview
  • רוצים לשלוט בהפצה מדורגת ובאחוז rollout
  • רוצים שליטה דקה בהורדה ברקע, בהתראות ובחלון תחזוקה
  • רוצים לראות בעצמכם telemetry של עדכונים ו-crash recovery

החוזק גדול, וגם המחיר גדול.

  • אימות חתימה
  • manifest הפצה
  • ניסיון חוזר / resume
  • proxy / firewall / רשת סגורה
  • rollback
  • התאוששות מעדכון שבור
  • עדכון של ה-updater עצמו

כלומר מה שגדל הוא אחריות, לא חופש.

updater עצמאי הוא בחירת אחריותupdater עצמאי נותן ערוצים, הפצה מדורגת ו-telemetry, ובתמורה אתם מתכננים ומריצים אימות חתימה, manifest, rollback, שחזור מעדכון שבור, וגם עדכון של ה-updater עצמו.מה מקבלים: ערוצים, הפצה מדורגת, telemetryupdater עצמאימה משלמים: אימות חתימה, rollback, שחזורמה שגדל הוא אחריות, לא חופשגם עדכון ה-updater עצמו הוא העבודה שלכם

איור 9: מה שגדל עם updater עצמאי הוא אחריות התפעול של תשתית העדכון.

5.6 אחרי שהשיטה נקבעה, מה בודקים אחר כך

גם אחרי “הולכים על MSI” אפשר להיתקע אם לא ברור מה לחפש. הנה נקודות כניסה טיפוסיות. אף אחת מהן היא לא “תשתמשו בזה”; אלה שמות שכדאי להכיר אחרי שבחרתם שיטה.

השיטה שנבחרה מה לבדוק אחר כך הערה
MSI WiX Toolset ערכת כלים בקוד פתוח לכתיבת MSI ב-XML. נקודת כניסה סטנדרטית ל-authoring של MSI
MSI Advanced Installer, InstallShield כלי MSI מסחריים סביב GUI. מתאימים אם רוצים לבנות custom action ו-upgrade ב-GUI
לא חייבים MSI, EXE מספיק Inno Setup, NSIS כלים שמייצרים installer ב-EXE בפורמט עצמאי. הם לא עולים על הזירה של Windows Installer
MSIX MSIX Packaging Tool, makeappx.exe, signtool.exe כלי המרה מ-installer קיים, וכלי אריזה וחתימה של Windows SDK
MSIX Windows Application Packaging Project סוג פרויקט ב-Visual Studio שמארוז פרויקט קיים ל-MSIX
ClickOnce אשף הפרסום של Visual Studio, mage.exe פרסום ויצירת manifest. התנהגות העדכון נקבעת באפשרויות הפרסום
updater עצמאי Squirrel.Windows, Velopack, WinSparkle, NetSparkle ספריות שנותנות שלד עדכון. לפני “לאמץ או לא”, השוו איך הן מטפלות באימות חתימה וב-rollback

כאן חשוב: בחירת כלי ובחירת שיטה הם שני דברים. Inno Setup נוח, אבל התוצר הוא לא MSI, ולכן הוא לא עולה על תפעול שמניח Windows Installer, למשל הפצת תוכנה ב-Group Policy או repair עם msiexec. אם ב-5.1 בחרתם MSI בדיוק בגלל זה, גם הכלי צריך להתאים.

בחירת כלי ובחירת שיטה הם לא אותו דברInno Setup נוח אבל לא מייצר MSI, ולכן לא עולה על הפצה ב-GPO או repair עם msiexec; בוחרים כלי לפי הסיבה שבחרתם שיטה.קובעים שיטהקובעים כליInno Setup לא מייצר MSIלא עולה על הפצת GPO או repair עם msiexecמתאימים כלי לסיבה שבחרתם שיטה

איור 10: כלי נוח לא בהכרח עולה על הזירה של השיטה שבחרתם.

6. נקודות שמסתבכים בהן

6.1 האם צריך package identity

אם מה שרוצים הוא יכולת Windows שמניחה package identity, הערך של MSIX קופץ בבת אחת.

ולהפך, אם רוצים

  • גישת קבצים unrestricted
  • גישת Registry unrestricted
  • חופש ב-elevation / במודל תהליכים
  • להשאיר הנחות Win32 ישנות כמו שהן

אז שיטה לכיוון unpackaged טבעית יותר.

מפרידים לפי הצורך ב-package identityאם רוצים יכולת Windows שמניחה package identity, הערך של MSIX קופץ; אם רוצים גישה unrestricted לקבצים ול-Registry או להשאיר הנחות Win32 ישנות, שיטה לכיוון unpackaged טבעית יותר.כןרוצים לרוץ unrestrictedרוצים יכולת שמניחה package identity?הערך של MSIX קופץשיטה לכיוון unpackaged טבעית יותר

איור 11: הצורך ב-identity הוא קו פרשת המים בין packaged ל-unpackaged.

6.2 יש שירות / מנהל התקן / Shell extension

שלושת אלה מכבידים בבת אחת על שיטת ההפצה.

  • driver: לא מתאים ל-MSIX
  • in-process Shell extension: לא מתאים ל-MSIX
  • Windows service: MSI טבעי, ו-MSIX עדיין בהשוואה בתנאים

ככל שיש רכיב שקשור עמוק ל-OS, הנושא הופך מהפצה שנראית קלה להאם אפשר להתקין, לעדכן ולהסיר נכון.

6.3 per-user או per-machine

אם משאירים את זה עמום, אחר כך זה תמיד מתפוצץ.

  • לכיוון per-user
    • ClickOnce
    • xcopy
    • חלק מ-MSIX
  • לכיוון per-machine
    • MSI
    • MSIX אם התנאים מתאימים

“להתקין בלי הרשאות admin” ו”שכל המשתמשים ישתמשו מאותו מקום” הם לא אותו דבר.

לא מערבבים per-user ו-per-machineלכיוון per-user המועמדים הם ClickOnce, xcopy וחלק מ-MSIX; לכיוון per-machine MSI, ו-MSIX אם התנאים מתאימים; התקנה בלי הרשאות ומקום משותף לכל המשתמשים הם שני דברים.לכיוון per-userClickOnce / xcopy / חלק מ-MSIXלכיוון per-machineMSI / MSIX אם התנאים מתאימיםהתקנה בלי הרשאות ומקום משותף לכולם הם לא אותו דבר

איור 12: אם משאירים את היקף ההתקנה עמום, אחר כך זה תמיד מתפוצץ.

6.4 תדירות עדכון ואחריות תפעול

לפי תחושת תדירות עדכון, בגסות:

  • עדכון רבעוני עד חודשי: גם MSI מספיק
  • עדכון חודשי עד שבועי: MSIX / ClickOnce נהיים הרבה יותר קלים
  • עדכון שבועי עד יומי: מופיע נימוק לשקול updater עצמאי
  • עדכון ידני / הצד שמציב שולט: גם xcopy מספיק

שיטת הפצה היא גם בחירת טכנולוגיה וגם תכנון תפעול.

מדרגות תדירות העדכוןברבעוני עד חודשי גם MSI מספיק; בחודשי עד שבועי MSIX או ClickOnce נהיים קלים; בשבועי עד יומי מופיע נימוק ל-updater עצמאי; אם ידני מספיק, גם xcopy.רבעוני עד חודשי: גם MSI מספיקחודשי עד שבועי: MSIX / ClickOnce קליםשבועי עד יומי: נימוק ל-updater עצמאיאם ידני מספיק, גם xcopy

איור 13: ככל שתדירות העדכון עולה, עולה הערך של עדכון built-in או תשתית עצמאית.

6.5 הפצה ברשת סגורה / offline

ברשת סגורה, פשטות מנצחת לעיתים קרובות auto-update מלוטש.

  • xcopy חזק
  • גם MSI חזק
  • גם ClickOnce עובד מ-file share או מדיה נשלפת
  • גם MSIX יכול לרוץ לפי איך משתמשים ב-App Installer

אבל אם מעדכנים תכוף ברשת סגורה, בלי לקבוע מי שם גרסה חדשה, לאן, ואיך משאירים גרסה ישנה, בחירת שיטה לבדה לא תחזיק תפעול.

ברשת סגורה פשטות מנצחתברשת סגורה פשטות מנצחת לעיתים קרובות auto-update מלוטש; אם מעדכנים תכוף, בלי לקבוע מי שם גרסה חדשה לאן ואיך משאירים גרסה ישנה, בחירת שיטה לבדה מתפרקת בתפעול.סביבה סגורה / offlineפשטות לפני auto-update מלוטשxcopy ו-MSI חזקיםקובעים גם מי שם גרסה חדשה ולאןקובעים גם איך משאירים גרסה ישנה

איור 14: ברשת סגורה קודם קובעים איך שמים גרסה חדשה וישנה, ורק אחר כך שיטה.

7. שש שאלות אחרונות כשמסתבכים

  1. האם האפליקציה מספיקה ל-current user, או שצריך להכניס machine-wide
  2. יש service / driver / Shell extension / רישום COM
  3. משתמשים ביכולת Windows שדורשת package identity
  4. רוצים להתקין רק כמשתמש רגיל
  5. תדירות העדכון חודשית, שבועית, או גבוהה יותר
  6. סביבת היעד סגורה, וגרסאות ה-OS אחידות

ברגע שעונים על שש אלה, בדרך כלל רואים לאן נוחתים.

  • 2 הוא “כן” → קודם חושבים מצד MSI
  • 3 הוא “כן” → בודקים MSIX בעדיפות
  • 1 הוא current user, 4 הוא “כן”, וזו אפליקציית שולחן עבודה ב-.NET → ClickOnce חזק
  • 4 הוא “כן”, 2 הוא “לא”, ותפעול של לשים ולרוץ מספיק → xcopy חזק
  • 5 גבוה, ורוצים להחזיק UX עדכון כערך מוצר → מכניסים updater עצמאי להשוואה
לאן מגיעים משש השאלותאם יש אינטגרציה ל-OS כמו שירות, קודם MSI; אם צריך package identity, בודקים MSIX בעדיפות; אפליקציית שולחן עבודה ב-.NET per-user כמשתמש רגיל דוחפת ל-ClickOnce; תפעול של לשים ולרוץ דוחף ל-xcopy; אם רוצים להחזיק UX עדכון, משווים גם updater עצמאי.כןלאכןלאאם זו אפליקציית שולחן עבודה ב-.NETאם תפעול של לשים ולרוץיש אינטגרציה ל-OS (שירות וכו')?קודם חושבים מצד MSIצריך package identity?בודקים MSIX בעדיפותper-user והתקנה כמשתמש רגיל?ClickOnce חזקxcopy חזקאם רוצים להחזיק UX עדכון, משווים גם updater עצמאי

איור 15: אם עוברים על תשובות שש השאלות בסדר הזה, בדרך כלל רואים לאן נוחתים.

8. סיכום

שיטת הפצה לאפליקציית Windows מתכנסת די טוב למשפט הזה.

מפרידים בין איך ההתקנה הראשונה בכלל מצליחה לבין מי אחראי להריץ את העדכון השוטף.

משם, ההחלטה המעשית הגסה היא:

  • MSI: אפליקציית שולחן עבודה מסורתית שנכנסת עמוק ל-OS
  • MSIX: אפליקציה שרוצה package identity ו-modern packaging / update
  • ClickOnce: אפליקציה עסקית ב-.NET שרוצים להפיץ בקלות per-user ולעדכן
  • xcopy: כלי עצמאי שמספיק לשים
  • updater עצמאי: מוצר שיש נכונות לתכנן ולהריץ את העדכון עצמו

ומה שחשוב ביותר:

  • אם יש driver / Shell extension / service, שיטת ההפצה נקבעת מאינטגרציה ל-OS, לא מהמראה הסופי
  • אם צריך package identity, ל-MSIX יש משמעות גדולה
  • updater עצמאי הוא קלף אחרון, לא בחירה ראשונה
  • ברשת סגורה פשטות מנצחת לעיתים קרובות תחכום

אם מסתבכים, גם אם מקבעים קודם רק שלושה דברים (per-user או per-machine, מה רושמים ב-OS, מה תדירות העדכון), השיחה זזה הרבה קדימה.

שלושה דברים לקבע קודםאם מסתבכים, גם אם מקבעים קודם רק per-user או per-machine, מה רושמים ב-OS, ומה תדירות העדכון, שיחת שיטת ההפצה זזה הרבה קדימה.per-user או per-machineמקבעים קודםמה רושמים ב-OSמה תדירות העדכוןהשיחה זזה הרבה קדימה

איור 16: כשמסתבכים בשיטה, מקבעים לפחות את שלושת אלה קודם.

9. מקורות

מאמרים עדכניים עם אותן תגיות, להעמקה בנושאים קרובים.

העמודים האלה ממקמים את הנושא בהקשר רחב יותר של שירותים והחלטות.

המאמר קשור ישירות לשירותים הבאים.

שאלות נפוצות

שאלות נפוצות בפניות בנושא המאמר.

מה ההבדל בין MSI ל-MSIX?
MSI היא צורת ה-installer המסורתית של Windows. היא מתאימה להתקנה שנוגעת עמוק ב-OS (per-machine, שירות Windows, רישום COM, Shell extension) ומאפשרת לבטא install / uninstall / repair בסגנון של Windows. MSIX הוא modern packaging שמניח Windows 10/11, והחוזקות שלו הן clean install / clean uninstall, עדכונים תכופים, ו-package identity. מצד שני MSIX לא מתאים למנהלי התקן; in-process Shell extension נתמך בתנאים מ-Windows 11 21H2; והוא גם לא מתאים להנחות Win32 ישנות ו-unrestricted. אם הרישום ל-OS צפוף, נקודת המוצא היא MSI. אם רוצים package identity ועדכון נקי, נקודת המוצא היא MSIX.
לבחור MSIX או ClickOnce?
אם רוצים להפיץ בקלות ולעדכן אוטומטית אפליקציה עסקית פנימית ב-.NET ב-per-user, ClickOnce עדיין בחירה חזקה. מודל העדכון ה-built-in נוח, אפשר להתקין כמשתמש רגיל, ואין צורך לבנות UX עדכון בעצמכם. מצד שני, אם רוצים יכולות Windows שדורשות package identity, שמים דגש על clean install / uninstall, או רוצים להתיישר ל-Intune או App Installer, MSIX הוא המועמד המוביל. שניהם לא מתאימים למוצר שנוגע עמוק ב-OS, ולכן אם יש שירות או מנהל התקן כדאי להתחיל מ-MSI.
אפשר עדיין להשתמש ב-ClickOnce, או שזו טכנולוגיה ישנה?
אפשר להשתמש בו גם עכשיו, ובתרחישים שמתאימים לו הוא בחירה חזקה. הוא יעיל כשרוצים להפיץ במהירות אפליקציית שולחן עבודה פנימית ב-.NET, ביחידת המשתמש (per-user), עם הרשאות משתמש רגיל, ולהריץ עם מודל העדכון ה-built-in. מצד שני, בטוח יותר לא לצפות ממנו תפקיד של installer שאוסף כמה prerequisites, או מוצר שנוגע עמוק ב-OS כמו שירות Windows, מנהל התקן או Shell extension. מבחינת תדירות עדכון, בעדכון חודשי עד שבועי ClickOnce או MSIX יכולים לרוץ די בקלות.
מתי שווה לשקול updater עצמאי?
updater עצמאי הוא לא הדבר שבוחרים בו ראשון. מוסיפים אותו כשיש דרישת עדכון ששיטת ההפצה הקיימת לא מכסה. שווה לשקול כשיש תדירות עדכון גבוהה, רצון להחזיק ערוצים כמו stable / beta / preview, שליטה בהפצה מדורגת ובאחוז rollout, או רצון לעקוב בעצמכם אחרי telemetry של עדכונים ו-crash recovery. אבל לוקחים על עצמכם לתכנן ולהריץ אימות חתימה, manifest הפצה, ניסיון חוזר, rollback, התאוששות מעדכון שבור, ואפילו עדכון של ה-updater עצמו. זו בחירה שמגדילה אחריות, לא חופש.

פרופיל הכותב

עמוד היכרות עם כותב המאמר.

Go Komura

מנהל KomuraSoft LLC

מתמחה בפיתוח תוכנה עבור Windows, ייעוץ טכני וחקירת תקלות, בעיקר בפרויקטים עם מערכות קיימות ובאגים שקשה לשחזר.

קישורים ציבוריים

חזרה לבלוג