היסטוריית עדכונים (גרסה ראשונה, פורסמה בתאריך 28 Aug 2026)
- פרסום ראשון
“עשיתי double-click על טבלה במפרט Word, והתפריט הפך לתפריט של Excel.” זה מה שקורה כשהטבלה מונחת במסמך לא כתמונה רגילה אלא כ-OLE object.
OLE הוא ראשי תיבות של Object Linking and Embedding. הוא משלב נתוני מסמך שנוצרו באפליקציה אחרת לתוך מסמך מארח, או ב-embedding או ב-linking. מבחינה טכנית, הישות היא COM object שאפשר להטמיע במסמך או לקשר אליו.12
נקודת ההתחלה להבנה היא השאלה “איפה הנתונים עצמם?” ברגע שזה ברור, אפשר לסדר למה מסמכים גדלים, למה קישורים נשברים כשמעבירים שרת, ולמה טבלה יכולה להיות נראית ועדיין לא ניתנת לעריכה.
המאמר הזה מיועד לאנשי IT בעסקים קטנים ובינוניים ולמפתחי אפליקציות עסקיות. הוא מתחיל בהשוואה בין embedding ל-linking, ואז עובר לפעולות יומיומיות, תיקונים לפי תסמין, וההסתייגויות ל-Access ולאבטחה. הפנימיות כמו COM ו-Structured Storage מרוכזות בפרק 7, וההחלטות על תפעול ותכנון עתידי בפרק 8.
1. קודם המסקנות: embedding הוא “עותק בתוך המסמך”, linking הוא “הפניה למקום אחר”
ההבדל בין embedding ל-linking הוא איפה נשמרים הנתונים עצמם. ניידות, גודל קובץ, ואיך עדכונים קורים — כולם נובעים מההבדל הזה.3
| נקודת השוואה | embedding | linking |
|---|---|---|
| איפה הנתונים עצמם חיים | בתוך מסמך המארח | במקור הקישור, בדרך כלל קובץ נפרד |
| מה המסמך שומר | הנתונים עצמם ומידע ניהול, ובדרך כלל presentation cache | מידע ניהול כמו שם ומקום של מקור הקישור והגדרת העדכון, ובדרך כלל presentation cache |
| כשנתוני המקור משתנים | העותק המוטמע לא מתעדכן | יכול להשתקף לפי הגדרת העדכון של הקישור |
| כשעורכים את האובייקט | עורכים את העותק בתוך המסמך; נתוני המקור לא מושפעים | עורכים את הנתונים במקור הקישור |
| גודל המסמך | בדרך כלל גדול יותר מקישור של אותו תוכן, כי הוא מחזיק עותק של הנתונים | קל יותר לשמור קטן, כי הנתונים לא מוחזקים בתוך המסמך |
| מסירת המסמך למחשב אחר | עצמאי מקובץ המקור, אבל עריכה דורשת את אפליקציית המקור | מקור הקישור חייב להיות נגיש גם מהמחשב המקבל |
| הסתייגויות עיקריות | ניפוח, תלות באפליקציית המקור | קישורים שבורים, הגדרות עדכון, תלות באפליקציית המקור |
embedding מתאים למקרים שבהם רוצים שהמסמך יהיה עצמאי מקובץ המקור. linking מתאים למקרים שבהם כמה מסמכים חולקים את אותם נתונים ורוצים ששינויים במקור ישתקפו. עדכוני קישור, עם זאת, אינם בהכרח אוטומטיים. האם הם אוטומטיים או ידניים נקבע בהגדרה בצד המסמך.456
flowchart TB
accTitle: ההבדל בין embedding ל-linking
accDescr: embedding שומר את הנתונים עצמם במלואם בתוך מסמך המארח, מה שהופך את המסמך לעצמאי אבל גדול יותר, ואילו linking שם במסמך רק הפניה, הגדרת עדכון ובדרך כלל מידע תצוגה בעוד הנתונים עצמם נשארים בקובץ מקור הקישור, כך שהמסמך נשאר קטן ושינויים במקור יכולים להשתקף לפי הגדרת עדכון הקישור (אוטומטית או ידנית)
doc["מסמך מארח (מסמך Word וכו')"] --> emb["embedding: שומר את הנתונים עצמם"]
doc --> lnk["linking: הפניה, הגדרות ו-(בדרך כלל) מידע תצוגה"]
emb -.-> self["עצמאי אבל גדול יותר"]
lnk --> src["קובץ מקור הקישור (הנתונים חיים כאן)"]
src -.-> upd["שינויי מקור יכולים להשתקף (תלוי בהגדרה)"]
איור 1: האם המסמך מחזיק את הנתונים עצמם או מפנה לנתונים במקום אחר. ההבדל הזה קובע את התכונות של גודל, עדכון ומסירה.
“הנתונים בתוך המסמך” ו”אפשר לערוך בכל מחשב” הם שני דברים שונים. גם, אם נשאר presentation cache, רק המראה האחרון עשוי להיות מוצג גם כשאפליקציית המקור או מקור הקישור אינם זמינים. להפריד בין “זה נראה”, “אפשר לערוך” ו”זה מעודכן” הוא הבסיס של triage.78
ב-diagram, solid line מציינת relation שתמיד מתקיים ו-dashed line מציינת relation מותנה (התנאים מופיעים בהסבר של כל relation ב-detail page). הרשימה המלאה של ה-relations (סה”כ 25, כולל evidence ו-certainty) וההגדרות של ה-concepts המרכזיים נמצאות ב-detail page של ה-knowledge map (ביפנית). Data: JSON-LD / Turtle
2. איפה פוגשים OLE objects ואיך הם נכנסים למסמך
2.1 פוגשים אותם ב-Word, Excel, Access ובמסמכים עסקיים ישנים
OLE תומך בתרבות המסמכים של Windows מאז שנות ה-90. המנגנון עדיין בשירות היום, אבל למטרות מעשיות עדיף לראות אותו לא כטכנולוגיה לאמץ באופן פעיל בתכנונים חדשים אלא כאחת שפוגשים בתוך מסמכים ומסדי נתונים קיימים.
| איפה | נקודת כניסה ליצירת OLE object | דוגמאות תוכן |
|---|---|---|
| Word / Excel / PowerPoint | Insert > Object, Paste Special | גיליונות Excel, מסמכי Word, שרטוטים, משוואות |
| Access | שדות OLE Object | תמונות, גיליונות Excel, קבצים מסוגים שונים |
| מסמכי Rich Text (RTF) | הדבקות שנעשו בעבר ב-WordPad ודומים | שרטוטים, אובייקטים מאפליקציות אחרות |
| טפסים ומפרטים ישנים | הטמעות שעשו עובדים קודמים | נתונים שנועדו “להיפתח ב-double-click” |
מסדי נתונים ששמרו תמונות עובדים או תמונות מוצרים בשדות OLE Object של Access הם נכס קיים טיפוסי נוסף. לשימוש הזה יש בעיית ניפוח, ופרק 5 מכסה את החלטת המעבר.9
2.2 “Insert Object” ו-“Paste Special”
Insert Object מאפשר לבחור בין יצירת אובייקט חדש ליצירה מקובץ קיים. יש גם אפשרות תצוגה “Display as icon”.
Paste Special מאפשר לבחור את פורמט הנתונים, ובנוסף, אם להטמיע או לקשר. הערכים שמנויים שם כ-“… Object” הם האפשרויות שמדביקות כ-OLE. גם הנתונים שנשמרים וגם הדרך שבה עורכים אותם אחר כך שונים מהדבקת תמונה רגילה.1011
שני אלה תואמים לדיאלוגים הסטנדרטיים של OLE, Insert Object ו-Paste Special, ו-MFC מספק classes להצגתם. ההבדל בין הנתיב שיוצר אובייקטים מ-copy and paste או drag and drop לבין הנתיב שיוצר אותם ישירות מ-class רשום או מקובץ מוסבר בפרק 7.1.1012
3. מה קורה ב-double-click
3.1 המארח הוא ה-“container”, האפליקציה שעושה את העריכה היא ה-“server”
כשמסמך Word מכיל טבלת Excel, Word הוא ה-OLE container שמארח אותה, ו-Excel, שמטפל בעריכת הטבלה, הוא ה-OLE server. מסמך שמטפל בנתונים מכמה אפליקציות בתוך מסמך אחד נקרא compound document של OLE.12
Word לא מממש את כל תכונות העריכה של Excel. המנגנון משתמש בתכונות של אפליקציית המקור כשפועלים על האובייקט. לכן עריכה דורשת את אפליקציית המקור גם כשהנתונים עצמם שמורים בתוך המסמך.
3.2 double-click מריץ את ה-“verb הראשי” שהאובייקט בחר
OLE object מגדיר את הפעולות שאפשר לבצע עליו כ-verbs: Edit לטבלה, Play לאודיו, וכן הלאה.
אפליקציית המארח מגיבה ל-double-click או לפעולה דומה בקריאה ל-IOleObject::DoVerb. מה שהפעולה כברירת מחדל, ה-verb הראשי (OLEIVERB_PRIMARY), עושה נקבע על ידי האובייקט, לא על ידי המארח. DoVerb מפעיל אוטומטית את אפליקציית ה-OLE server ומבצע את הפעולה המתאימה לאובייקט הזה. double-click לא תמיד אומר Edit.13
3.3 מתי העריכה קורה בתוך Word ומתי נפתח חלון נפרד
אם גם האובייקט המוטמע וגם המארח תומכים ב-In-Place Activation, אפשר לערוך את האובייקט בתוך חלון המארח. סרגל התפריטים מוחלף ב-composite menu bar שממזג את התפריטים של ה-container ושל ה-server. זה המנגנון שבו תפריטי העריכה של Excel מופיעים בתוך Word. לחיצה מחוץ לאובייקט מבטלת את ה-activation ומחזירה את התפריטים המקוריים.14
sequenceDiagram
accTitle: מ-double-click עד In-Place Activation
accDescr: אפליקציית המארח מגיבה ל-double-click בהרצת ה-verb הראשי דרך DoVerb של IOleObject, OLE מפעיל את אפליקציית ה-server, ואם גם המארח וגם ה-server תומכים ב-In-Place Activation האובייקט המוטמע נערך בתוך חלון המארח עם תפריטים ממוזגים ולחיצה מחוץ מבטלת את ה-activation ומחזירה את התפריטים המקוריים (אם אחד מהם לא תומך, העריכה קורה בחלון נפרד)
participant U as משתמש
participant C as אפליקציית מארח (Word וכו')
participant S as OLE / אפליקציית server
U->>C: double-click על האובייקט המוטמע
C->>S: מריצים את ה-verb הראשי דרך DoVerb
alt שניהם תומכים ב-In-Place Activation
S->>C: מפעילים את ה-server, ממזגים את התפריטים
U->>C: עורכים במקום
U->>C: לוחצים מחוץ לאובייקט
C->>S: מבטלים activation, מחזירים את התפריטים המקוריים
else אחד הצדדים לא תומך
S->>C: עורכים בחלון נפרד
end
איור 2: עריכת אובייקט מוטמע במקום דורשת תמיכה גם מה-container וגם מה-server. בלעדיה, העריכה קורה בחלון נפרד.
איך אובייקט נפתח תלוי בסוג האובייקט, ב-verb שרץ, ובמה שהאפליקציות תומכות.
| תנאי | איך זה נפתח |
|---|---|
| מוטמע, שני הצדדים תומכים ב-In-Place Activation, ומבוצעת עריכה במקום | נערך בתוך חלון המארח |
| מוטמע, אבל אחד הצדדים לא תומך ב-In-Place Activation | נערך בחלון נפרד |
מוטמע, עם ציון OLEIVERB_OPEN |
נפתח בחלון נפרד |
| אובייקט מקושר | תמיד נפתח בחלון נפרד |
In-Place Activation הוא מנגנון שמניח embedding; הוא לא בשימוש לקישורים. המימוש שלו גם אופציונלי גם ל-container וגם ל-server. עצם העובדה ש”אותו מסמך נפתח אחרת” אינה עילה לקרוא לזה תקלה.11413
4. triage לפי תסמין: לא מתעדכן, גדול מדי, לא נפתח
4.1 הטבלה נראית, אבל שינויים במקור הקישור לא משתקפים
בודקים את מיקום מקור הקישור ואת שיטת העדכון של הקישור. מה שקישור מחזיק בצד המסמך אינו הנתונים עצמם אלא מידע ניהול כמו שם ומקום של מקור הקישור והגדרת העדכון, ובדרך כלל גם presentation cache.155
העבודה של לאתר את מקור הקישור שייכת לרכיב COM שנקרא moniker. כשהעברת file server, שינוי שם תיקייה, שינוי נתיב share, מחיקת קובץ המקור או דומה הופכים את המיקום החדש לבלתי ניתן למעקב, פתרון הקישור נכשל. זה קישור שבור.
אם נשמר presentation cache, הטבלה הישנה נשארת במסמך. זה שטבלה מוצגת אינו ראיה שהקישור בריא. אם האובייקט נוצר בהגדרה שלא שומרת cache, גם המראה האחרון הזה לא נשאר.78
התיקון הוא להצביע מחדש את נתיב מקור הקישור למיקום החדש מדיאלוג Edit Links של המסמך. אם הנתיב נכון והאובייקט לא מתעדכן, הוא עשוי פשוט להיות מוגדר לעדכון ידני, לכן בודקים גם את שיטת העדכון. מתי שינויים במקור הקישור משתקפים תלוי בהגדרת העדכון האוטומטית או הידנית.6
אם יש הרבה מסמכים שנשענים חזק על קישורים, כוללים inventory לפני ההעברה ואת עדכוני הקישורים אחרי ההעברה בתוכנית המעבר של ה-file server. מתכננים גם עדכון גורף איפה שאפשר. אם שמים לב רק אחרי ההעברה, מוצאים את עצמם מחפשים, מסמך-מסמך, אחרי מקורות הקישור שעובדים קודמים השתמשו בהם.
4.2 מסמך Word או Excel גדול באופן חריג
בודקים אם נחוצה עריכה מחדש, ושוקלים מחדש אם המסמך צריך להחזיק את הנתונים עצמם. embedding משכפל את הנתונים ושומר אותם בתוך המסמך, כך שהמסמך גדול בדרך כלל מאשר כשאותו תוכן מקושר. גם presentation cache נשמר בדרך כלל, כך שהמסמך לא בהכרח מכיל רק את הנתונים שמשמשים לעריכה.47
כשדוח עם הרבה טבלאות מוטמעות גדל ולוקח הרבה זמן להיפתח, חושדים במבנה הזה. בוחרים את התיקון לפי איך הנתונים בשימוש.
| איך הנתונים בשימוש | איך מעבדים מחדש |
|---|---|
| אין צורך בעריכה מחדש במסמך | מדביקים כתמונה |
| נתוני המקור משותפים ושינויים צריכים להשתקף | משתפים את קובץ המקור בנפרד ושמים קישור במסמך |
| נתוני המקור מנוהלים במקום אחר והמסמך צריך רק את המראה | משתפים את קובץ המקור ושמים במסמך רק תמונה |
זכרו, עם זאת, שמעבר לקישורים כדי להקטין גודל מוסיף את האחריות לנהל את מקורות הקישור. במסמכים שמופצים, ההפניה נשברת בקלות, כך ש”להפוך כל embedding לקישור” גורף אינו התיקון הנכון.
4.3 double-click לא פותח ולא עורך את האובייקט
קודם בודקים אם אפליקציית המקור של האובייקט הזה קיימת גם במחשב הנוכחי. העצמאות של embedding היא לגבי איפה הנתונים שמורים; תכונות העריכה אינן בתוך המסמך.
אם אפליקציית המקור חסרה, אפשר להשתמש רק בתצוגה, בתנאי שנשמר presentation cache. נתוני תצוגה ב-cache מתוכננים להיות זמינים מה-container גם כשאפליקציית ה-server לא רצה או לא זמינה.7
אם האובייקט הודבק עם “Display as icon”, עם זאת, רואים את האייקון אבל לא את התוכן. לאובייקט שלא מחזיק cache בכלל, גם המראה האחרון לא נשאר. האם יש cache תלוי בערך OLERENDER שצוין בזמן היצירה.8
אם אפליקציית המקור קיימת והאובייקט עדיין לא נפתח, עושים triage בסדר הזה.
- בודקים תאימות גרסה של האפליקציה. ייתכן שתידרש המרת הטיפוס, ול-OLE יש דיאלוג סטנדרטי להמרה.
- בודקים רישום COM class (CLSID) חסר או פגום. תיקון הרישום עשוי לדרוש התקנה מחדש של האפליקציה או דומה.
- בודקים חסימה על ידי הגדרות אבטחה, וקלקול בצד המסמך.10
למסמכים ממקור לא ידוע, לא נותנים עדיפות לפתיחה; מאמצים את הנוהג לא להפעיל את האובייקט. הטיפול באבטחה מוסבר בפרק 6.
5. ב-Access, מפרידים “רק לשמור” מ”צריך התנהגות OLE”
5.1 תמונות בשדה OLE Object נוטות לנפח את מסד הנתונים
טיפוס הנתונים OLE Object של Access הוא טיפוס שדה להטמעה או קישור של אובייקטים כמו גיליונות Excel, מסמכי Word, שרטוטים וצלילים בטבלה. הגבול העליון שלו הוא בערך 1 GB.9
שימוש בטיפוס הזה רק כדי לשמור תמונות עובדים או תמונות מוצרים הופך את יעילות האחסון לבעיה. Microsoft מסבירה שטיפוס Attachment גמיש יותר מטיפוס OLE Object ומשתמש באחסון ביעילות רבה יותר כי הוא לא יוצר תמונת bitmap של קובץ המקור.9
מעבר לטיפוס Attachment, עם זאת, לא מסיר את מגבלות הגודל.
| פריט | מגבלה או תכונה |
|---|---|
| פורמטים שתומכים בטיפוס Attachment | .accdb |
| גודל מרבי של כל מסד הנתונים | 2 GB |
| גודל מרבי של כל קובץ מצורף | 256 MB |
| הצגת תמונות | BMP, PNG, JPEG ודומים מוצגים בלי תוכנה נוספת |
אלה מגבלות של טיפוס Attachment ב-Access. הן חלות על נושא אחר מאשר הגבול של בערך 1 GB של טיפוס OLE Object.16
5.2 לאחסון בלבד, משתמשים בטיפוס Attachment או בתיקייה עם ניהול נתיבים
בתכנון חדש שצריך רק לשמור תמונות או קבצים, אין צורך לבחור בטיפוס OLE Object. שוקלים את טיפוס Attachment, או תכנון שמניח את הקבצים בתיקייה ושומר במסד הנתונים רק את הנתיבים. גם למסדי נתונים קיימים, שני אלה הם יעדי המעבר.
זה עניין אחר אם צריך התנהגות ייחודית ל-OLE כמו קישור או activation. במקרה כזה, מקבלים את ההחלטה עם השארת המצב הקיים כאחת האפשרויות. במקום “להחליף מיד כי זה טיפוס OLE Object”, קודם מפרידים אם זה אחסון בלבד או אם זה צריך לעבוד כאובייקט.916
6. אבטחה: מטפלים ב-embedding רגיל וב-OLE packages אחרת
6.1 מסמך הופך לנקודת כניסה להרצת אפליקציה אחרת
עם OLE, אובייקט מאפליקציה אחרת מובא לתוך מסמך ורץ במחשב של מי שפותח אותו. המבנה הזה הוא גם אמצעי משלוח לתוקפים.
בפועל, CVE-2014-4114, פגיעות שמריצה קוד שרירותי דרך קבצי PowerPoint ודומים שמכילים OLE object מעוצב, שימשה בהתקפות ממוקדות. כי פורמטי Office ואחרים שיכולים להחזיק OLE objects יכולים להפוך לווקטורי תקיפה, “רק התכוונתי לקרוא את המסמך” הופך לנקודת כניסה להרצה.17
6.2 חוסמים הפעלת OLE Package ברמת הארגון
OLE packages (Object Packager) ראויים לתשומת לב מיוחדת. זה מנגנון ישן שעוטף קובץ שרירותי לתוך מסמך כ-OLE object, והוא יכול להחזיק גם קבצים להרצה. פגיעות remote code execution שנוגעת ל-Object Packager גם פורסמה.18
מסיבה זו, איסור הפעלת OLE Package ב-Word, Excel ו-PowerPoint דרך הגדרות Registry הוא אמצעי hardening. המדריך של Microsoft המיושר עם Essential Eight של ממשלת אוסטרליה מראה את ההליך להפצת סקריפט PowerShell להגדרות האלה לארגון דרך Intune.19
מפצלים את נוהג התפעול לשלוש נקודות.
- לא פותחים, ולא נותנים לאחרים לפתוח, אובייקטים במסמכים ממקור לא ידוע. מתייחסים ל-activation כפעולה באותו משקל כמו פתיחת קובץ אחר.
- חוסמים הפעלת OLE Package ברמת הארגון. זה כמעט אף פעם לא נחוץ בעבודה רגילה, לכן לא סומכים על זהירות אישית בלבד.
- לא מטילים איסור גורף שמתפרש גם על embedding ו-linking רגילים במסמכים פנימיים. שופטים את הסיכון של packages ומסמכים מעוצבים בנפרד משימוש עסקי קיים.
מסקנת המאמר הזה אינה “לאסור OLE בכלל”. במקום לעצור עבודה באיסור אחיד גם על טבלאות Excel מוטמעות רגילות, הנקודה היא להתמקד באובייקטים ממקור לא ידוע וב-OLE packages.
7. פנימיות: התפקידים של COM, Structured Storage ו-monikers
מכאן ואילך, ההסבר מתקרב למימוש, כפי שנחוץ לתחזוקת אפליקציות עסקיות ולחקירת נכסי מסמכים. הוא ממפה את התסמינים עד כאן ל”איזה מנגנון אחראי”.
7.1 שלושת היסודות של OLE compound documents
OLE compound documents נשענים על COM, Structured Storage ו-Uniform Data Transfer. בנוסף ל-IUnknown של COM, אובייקט חושף ממשקים ייעודיים ל-compound documents כמו IOleObject ו-IViewObject2. אובייקט מקושר מממש בנוסף IOleLink.2
| יסוד | אחריות | ממשקים עיקריים |
|---|---|---|
| COM | האובייקט עצמו והחוזה לפעולה עליו | IUnknown, IOleObject, IViewObject2, ו-IOleLink לקישורים |
| Structured Storage | אחסון היררכי בתוך המסמך | IStorage, IStream |
| Uniform Data Transfer | נקודת הכניסה ליצירת embeddings וקישורים מ-copy and paste או drag and drop | IDataObject |
בנתיב העברת הנתונים, ה-OLE server מציע את הנתונים שלו דרך IDataObject ואומר ל-container, דרך פורמטי clipboard ייעודיים, אם אפשר להדביק כ-embedding או כקישור. זה מה שמוביל לאפשרויות ב-Paste Special.12
עם זאת, לא כל פעולת יצירה עוברת דרך IDataObject. יצירת אובייקט חדש מ-Insert Object, או יצירה מקובץ קיים, היא נתיב נפרד שיוצר את האובייקט ישירות מ-class רשום או מקובץ. המכניקה של ה-clipboard ושל drag and drop עצמם מכוסה ב-“איך clipboard ו-drag-and-drop עובדים”.
7.2 Structured Storage הוא “מערכת קבצים בתוך קובץ אחד”
Structured Storage יוצר, בתוך קובץ אחד, היררכיה של storages (IStorage), שתואמים לתיקיות, ושל streams (IStream), שתואמים לקבצים. אפשר לקנן substorages ו-streams תחת ה-root storage.20
המימוש הסטנדרטי ש-COM מספק הוא compound files. זה פורמט קובץ יחיד שאפשר לטפל בו באופן עצמאי ממערכות קבצים כמו FAT ו-NTFS, והפורמט עצמו מפורסם כ-MS-CFB (Compound File Binary File Format).2122
ה-container מספק את המקום שבו האובייקט נשמר. אובייקט שנשמר דרך IPersistStorage כותב את הנתונים שלו ל-IStorage שהוא מקבל. מימוש שמשתמש ב-IPersistStream שומר ל-IStream במקום זאת.2
flowchart TB
accTitle: מבנה פנימי של compound file
accDescr: ל-compound file יש, תחת ה-root storage שלו, היררכיה של storages שתואמים לתיקיות ו-streams שתואמים לקבצים, אובייקטים מוטמעים שנשמרים דרך IPersistStorage נשמרים ב-substorages ואובייקטים שנשמרים דרך IPersistStream ב-streams, storage של אובייקט מוטמע יכול לשאת CLSID שמזהה את אפליקציית המקור (יכול גם להיות ריק), stream של presentation cache נשמר בדרך כלל אבל יכול להיעדר לפי ההגדרה בזמן היצירה, והכל עובד כמערכת קבצים בתוך קובץ אחד
root["root storage (גוף המסמך)"] --> s0["stream: נתוני גוף"]
root --> st1["storage: embedding (IPersistStorage)"]
st1 --> s1["stream: נתוני אובייקט"]
st1 --> s2["stream: presentation cache (רגיל)"]
st1 -.-> cls["CLSID יכול לזהות את המקור (אופציונלי)"]
root -.-> s3["stream: persistence של IPersistStream"]
איור 3: נבנית היררכיה בתוך המסמך, והאובייקט שומר את הנתונים שלו עצמו. מבחינים בין persistence דרך storage לבין persistence דרך stream.
רשומת directory יכולה לשאת CLSID שמזהה את אפליקציית המקור של האובייקט. אם ה-storage של ה-embedding מכיל CLSID, אפשר לקבוע איזו אפליקציה צריכה לפתוח את האובייקט. ה-CLSID יכול להיות ריק, עם זאת, וגם ה-presentation cache יכול להיעדר לפי ההגדרה בזמן היצירה.228
7.3 המעבר ל-.docx לא גרם לפורמט האחסון של OLE להיעלם
בפורמטי Office הישנים .doc / .xls, הקובץ עצמו הוא compound file. גוף המסמך נשמר כ-streams, ואובייקטים מוטמעים כ-substorages.
ה-.docx / .xlsx הנוכחיים הם פורמטי Open XML מבוססי ZIP, אבל הבינאריים של הטמעות OLE ישנות, oleObject*.bin, עדיין נשמרים בפורמט compound file. מצד שני, כשמסמכי Office חדשים מוטמעים זה בזה, קובץ כמו .xlsx יכול לשבת בתוך ה-ZIP כמו שהוא.22
| מה נשמר | כלי האחסון |
|---|---|
פורמטי Office ישנים .doc / .xls |
כל הקובץ הוא compound file |
| הטמעות OLE ישנות בתוך פורמטים נוכחיים | בינארי בתוך ה-ZIP הוא compound file |
| מסמכי Office חדשים מוטמעים זה בזה | יכולים להישמר בתוך ה-ZIP כקובץ |
כלומר, ה-compound file אינו רק “פורמט מסמך ישן”; הוא שורד בתוך מסמכים נוכחיים כפורמט אחסון מקונן.
7.4 monikers עוקבים אחרי מיקום הקישור; הגדרות הקישור שולטות בעדכונים
moniker הוא רכיב COM שמבטא את מיקום האובייקט כשם ופותר אותו כשצריך. הפתרון הזה נקרא binding. אובייקט מקושר משתמש ב-monikers כדי לנהל מתן שמות, מעקב ו-activation של מקור הקישור.15
IOleLink הוא הממשק שמספק ל-container ניהול של מקור הקישור. הנוכחות או ההיעדר שלו מאפשרים ל-container להבחין בין embedding לקישור. גם כשמסמך שמכיל קישור נשמר, נתוני הקישור עצמם נשמרים במקור הקישור. מה שנשאר במסמך הוא מידע הניהול של הקישור עצמו, כמו השם והמיקום והגדרת העדכון, ובדרך כלל presentation cache.15
חלוקת העבודה הזו היא שמובילה ל”הטבלה נראית אבל לא מתעדכנת” של פרק 4.1. אם פתרון מקור הקישור נכשל, אי אפשר להגיע לנתונים, וגם אם אפשר להגיע, קישור שמוגדר לעדכון ידני לא מתעדכן אוטומטית. חקירת פתרון המיקום, הגדרת העדכון והתצוגה ב-cache בנפרד מאפשרת לסדר את הסיבה.67
8. איך חיים עם OLE היום: לא מוסיפים תלויות חדשות, מכירים את הקיימות
המדיניות הבסיסית היא להימנע מהסתמכות על embedding של OLE בתכנונים חדשים, ולטפל בנכסים קיימים ב”שמירה על סביבה שיכולה לפתוח אותם” וב”עשיית inventory”. האם להמשיך להשתמש נקבע מקרה-מקרה.
| מצב | תגובה מומלצת | סיבה |
|---|---|---|
| זרימות מסמכים חדשות | לא מסתמכים על embedding: מדביקים כתמונה, משתפים את קובץ המקור, וכן הלאה. גם קישורים ממזערים | נמנעים מניפוח ומתלות חדשה בסביבת העריכה |
| אפליקציה עסקית חדשה שצריכה לשים נתונים של אפליקציה אחרת במסמך | מתכננים סביב תמונות, PDF או קבצים מצורפים במקום לממש OLE container | כמעט אין היום מקרה שבו זה מחזיר את עלות המימוש והתחזוקה |
| מסמכים מוטמעים קיימים | שומרים סביבה שיכולה לפתוח אותם, ושומרים גרסת PDF לצד מסמכים חשובים | גם עם הנתונים בתוך המסמך, אי אפשר לערוך ברגע שאפליקציית המקור אובדת |
| מסמכים שנשענים חזק על קישורים, ומעבר file server | כוללים inventory של קישורים ועדכוני קישורים בתוכנית המעבר | קישורים נשברים אם אי אפשר לעקוב אחרי המיקום אחרי ההעברה |
| תמונות או קבצים שמורים ב-Access | עוברים לטיפוס Attachment או לניהול נתיבים. מחליטים בנפרד כשצריך התנהגות ייחודית ל-OLE | לאחסון בלבד, טיפוס Attachment גמיש ויעיל יותר |
| hardening של סביבת Office | חוסמים הפעלת OLE Package ברמת הארגון | מוצג כאמצעי hardening מיושר עם הנחיות ציבוריות |
החלטות Access והאבטחה תואמות כל אחת גם לחומר של Microsoft עצמה.919
לשמירה לטווח ארוך, הסביבה שיכולה לפתוח את הנתונים היא חלק מהנכס, לא רק הנתונים. שינויי דור באפליקציות ושינויים במערכת ההפעלה שוחקים את ההנחה שאפליקציית המקור זמינה. מעבר לשמירת גרסאות PDF של מסמכים חשובים, נחוצים אמצעים כמו שמירה על סביבה שיכולה לפתוח אותם במכונה וירטואלית.
מנגנון OLE ממשיך לעבוד כל עוד Windows ממשיך לשמור תאימות לאחור. האם אובייקט בודד נפתח, עם זאת, תלוי אם אפליקציית המקור עדיין קיימת. אם ההנחה הזו מובטחת, אין צורך למהר לחסל הכל.
ה-inventory צריך לזהות שלושה דברים: השרתים שמחזיקים מקורות קישור, המסמכים שמכילים embeddings, ומסדי הנתונים שמשתמשים בטיפוס OLE Object. ברגע שהתלויות האלה ידועות, אפשר לבנות מעברים, hardening והמרות לתוך תוכנית.
9. סיכום
OLE object הוא COM object לטיפול בנתוני מסמך של אפליקציה אחרת כ-embedding או כקישור. embedding שומר את הנתונים בתוך המסמך; linking מפנה לנתונים במקום אחר. מתחילים בליישר את ההבדל הזה.245
אחר כך, חושבים על תצוגה, עריכה ועדכון בנפרד. גם אם נשאר presentation cache, אי אפשר לערוך את האובייקט בלי אפליקציית המקור, ואי אפשר לעדכן אותו אם אי אפשר לעקוב אחרי מקור הקישור. איך זה נפתח ב-double-click גם משתנה לפי סוג האובייקט, ה-verb והתמיכה ב-In-Place Activation.
לא מוסיפים תלויות חדשות בזרימות חדשות, ומתחזקים מסמכים קיימים בידיעת הסביבה שיכולה לפתוח אותם ולאן ההפניות שלהם מצביעות. לאחסון תמונות וקבצים בלבד ב-Access משתמשים בטיפוס Attachment או בניהול נתיבים, וחוסמים הפעלת OLE Package ברמת הארגון.
COM, ה-clipboard ו-drag and drop, וה-compound documents במאמר הזה הם פנים שונות של המילה OLE. הפרדת התפקידים של תשתית רכיבים, העברת נתונים ושילוב למסמכים מקלה לעקוב אחרי מה שקורה בתוך נכסים עסקיים ישנים.
מאמרים קשורים
- COM, ActiveX ו-OCX — ההבדלים והקשר ביניהם
- איך clipboard ו-drag-and-drop עובדים — טיפול נכון ב-OLE data transfer באפליקציות עסקיות
- STA ו-MTA ב-COM — threading model, ואיך נמנעים מ-hang
- למה תהליכי EXCEL.EXE נשארים אחרי אוטומציית COM של Excel ב-C# — דפוסי שחרור הפניות והחלטת ההחלפה
- ActiveX / OCX: להשאיר, לעטוף או להחליף
- הארכת חיים ומעבר של אפליקציות עסקיות ב-VB6 / Access — טבלת החלטה להשאיר, לעטוף או להחליף
תחומי ייעוץ קשורים
KomuraSoft LLC מטפלת בחקירה ובמעבר של נכסי מסמכים ומסדי נתונים ישנים שמערבים OLE ו-COM (יציאה מטיפוס OLE Object של Access, inventory של מסמכים מוטמעים והמרתם ל-PDF, טיפול גורף בקישורים שבורים), בתחזוקה ובשינוי של אפליקציות עסקיות שכוללות רכיבי COM, ובתכנון אפליקציות משולבות Office. אפשר להתייעץ גם מהשלב של “אין לי מושג מה קורה כשאני עושה double-click על המסמך הזה”.
קישורים
-
Microsoft Learn, OLE Background. על כך ש-OLE התחיל כראשי תיבות של Object Linking and Embedding, על כך שמסמכי OLE (compound documents) משלבים נתונים מכמה אפליקציות, על חלוקת התפקידים בין containers ל-servers, על סקירה של In-Place Activation (עריכה חזותית), ועל כך שפריטים מקושרים לא מופעלים במקום. ↩ ↩2 ↩3
-
Microsoft Learn, Compound Documents. על כך ש-OLE compound documents נשענים על COM, Structured Storage ו-Uniform Data Transfer; על כך שאובייקטי compound document הם COM objects שאפשר להטמיע במסמך או לקשר אליו והם חושפים ממשקים ייעודיים כמו IOleObject, IOleLink ו-IViewObject2; ועל כך שאובייקטים מנהלים persistence משלהם דרך IPersistStorage/IPersistStream בעוד ה-container מספק את ה-IStorage. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, Linking and Embedding. על כך שיש שני סוגים של אובייקטי compound document, מקושרים ומוטמעים, ועל כך שההבדל באיפה נתוני המקור שמורים משפיע על ניידות, activation, עדכון וגודל. ↩
-
Microsoft Learn, Embedded Objects (COM). על כך שאובייקטים מוטמעים נשמרים פיזית בתוך ה-compound document יחד עם מידע הניהול שלהם, על כך שהמסמך גדול יותר מאשר כשהאובייקט מוחזק כקישור, על כך ששינויים במקור לא משתקפים בעותק המוטמע, ועל היתרונות של ניידות (קישורים לא נשברים כשהמסמך נמסר למחשב אחר) ושל In-Place Activation. ↩ ↩2 ↩3
-
Microsoft Learn, Linked Objects. על כך שנתוני המקור של אובייקט מקושר נשארים במקור הקישור ורק הפניה ומידע תצוגה נשמרים במסמך, על כך שגודל המסמך נשאר קטן, על כך ששינויים במקור הקישור משתקפים בכל מסמך שמכיל את הקישור, ועל כך שהפעלת קישור מפעילה את אפליקציית ה-server. ↩ ↩2 ↩3
-
Microsoft Learn, OLEUPDATE enumeration (oleidl.h). על כך שעדכון ה-cache של אובייקט מקושר הוא או אוטומטי (OLEUPDATE_ALWAYS) או ידני (OLEUPDATE_ONCALL), שתואם לאפשרויות העדכון האוטומטי והידני בדיאלוג Links, ועל כך שעדכונים ידניים קורים רק כשקוראים ל-IOleObject::Update או ל-IOleLink::Update. ↩ ↩2 ↩3
-
Microsoft Learn, IOleCache interface (oleidl.h). על הממשק שמספק שליטה בנתוני התצוגה שנשמרים ב-cache בתוך אובייקט, ועל כך שנתוני תצוגה ב-cache זמינים מ-container של האובייקט גם כשאפליקציית ה-server לא רצה או לא זמינה. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, OLERENDER enumeration (oleidl.h). על ה-enumeration שמציין את סוג ה-cache המקומי שמבקשים כשיוצרים embedding או קישור, ועל כך שציון OLERENDER_NONE מבקש אין יכולת ציור או שליפת נתונים ב-cache מקומי (כלומר אין presentation cache). ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, DataType property (Access). על כך שטיפוס OLE Object של Access הוא טיפוס להטמעה או קישור של אובייקטים כמו גיליונות Excel, מסמכי Word, גרפיקה וצלילים בטבלה, עם גבול של בערך 1 GB, ועל כך שטיפוס Attachment גמיש יותר מטיפוס OLE Object ומשתמש באחסון ביעילות רבה יותר כי הוא לא יוצר תמונת bitmap של קובץ המקור. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, Dialog boxes in OLE. על התפקידים של הדיאלוגים הסטנדרטיים של OLE: Insert Object (הכנסת אובייקט חדש או אחד מקובץ קיים, והצגה כאייקון), Paste Special (בחירת הפורמט ובחירת embedding, linking או תצוגת אייקון), Change Icon, ו-Convert (המרת הטיפוס של פריט מוטמע או מקושר). ↩ ↩2 ↩3
-
Microsoft Learn, Selection.PasteSpecial method (Word). על שיטת VBA שקולה ל-Paste Special של Word, שבנוסף לציון פורמט ההדבקה שולטת בהדבקת קישור דרך הארגומנט Link ובתצוגת אייקון דרך הארגומנט DisplayAsIcon. ↩
-
Microsoft Learn, Creating Linked and Embedded Objects from Existing Data. על כך שיצירת אובייקטים מוטמעים ומקושרים מתחילה מהעברת נתונים של IDataObject דרך ה-clipboard או drag and drop, על כך ש-OLE servers מציעים פורמטי clipboard ייעודיים ליצירת embeddings וקישורים לפי סדר fidelity, ועל בחירה בין embedding ל-linking בפקודה שקולה ל-Paste Special. ↩ ↩2
-
Microsoft Learn, IOleObject::DoVerb method (oleidl.h). על כך ש-verbs הם פעולות שהאובייקט מגדיר, על כך ש-OLEIVERB_PRIMARY, שקובע את התנהגות ה-double-click, נקבע על ידי האובייקט ולא על ידי ה-container, על כך ש-DoVerb מפעיל אוטומטית את אפליקציית ה-OLE server, ועל כך ש-OLEIVERB_OPEN פותח אובייקט מוטמע בחלון נפרד. ↩ ↩2
-
Microsoft Learn, Implementing In-Place Activation. על כך ש-In-Place Activation מאפשר לפעול על אובייקט מוטמע בלי לעזוב את מסמך ה-container, על כך שסרגל התפריטים מוחלף ב-activation ב-composite menu bar שממזג את התפריטים של ה-container ושל ה-server ומוחזר ב-deactivation, על כך שהמימוש אופציונלי גם ל-container וגם ל-server, ועל כך שאובייקטים מקושרים תמיד נפתחים בחלון נפרד. ↩ ↩2
-
Microsoft Learn, Linked Objects and Monikers. על כך שאובייקטים מקושרים נותנים שם למקור דרך monikers ומטפלים ב-binding, שמוצא ומפעיל את המקור, על כך ש-IOleLink מזהה אובייקט כקישור ומספק ניהול של מקור הקישור, ועל כך שהנתונים נשמרים במקור הקישור כשמסמך שמכיל קישור נשמר בעוד המסמך שומר רק את מידע השם והמיקום. ↩ ↩2 ↩3
-
Microsoft Learn, Attachment object (Access). על כך שטיפוס Attachment זמין במסדי נתונים .accdb, על כך שגבול הנתונים המצורפים הוא גודל מסד הנתונים המרבי 2 GB עם קבצים בודדים עד 256 MB, ועל כך שפורמטי תמונה כמו BMP, PNG ו-JPEG ניתנים להצגה בלי תוכנה נוספת. ↩ ↩2
-
Microsoft Learn, Microsoft Security Bulletin MS14-060 (CVE-2014-4114). על כך ש-OLE הוא טכנולוגיה שמאפשרת יצירה ועריכה של נתונים מורכבים, על הפגיעות שמאפשרת arbitrary code execution עם הזכויות של המשתמש הנוכחי על ידי כך שגורמים למשתמש לפתוח קובץ שמכיל OLE object מעוצב, על כך שפורמטי Office והרבה פורמטי קבצים אחרים שיכולים להחזיק OLE objects יכולים להכיל OLE objects זדוניים, ועל כך שנצפו התקפות ממוקדות מוגבלות שמנצלות את הפגיעות הזו. ↩
-
Microsoft Learn, Microsoft Security Bulletin MS12-002. על כך ש-Windows Object Packager הוא כלי שיוצר packages שאפשר להכניס לקבצים, ועל פגיעות remote code execution (CVE-2012-0009) שנגרמת מרישום ומימוש לא תקינים שלו, יחד עם ה-workarounds. ↩
-
Microsoft Learn, Essential Eight user application hardening. על מדריך ה-hardening המיושר עם Essential Eight של ממשלת אוסטרליה שמראה את ההליך להפצה דרך Intune של סקריפט PowerShell שמחיל את מפתחות ה-Registry שחוסמים הפעלת OLE Package ב-Excel, PowerPoint ו-Word. ↩ ↩2
-
Microsoft Learn, IStorage interface (objidl.h). על כך ש-Structured Storage מאפשר אחסון היררכי של מידע בתוך קובץ אחד ונקרא “מערכת קבצים בתוך קובץ”, על כך ש-storages תואמים לתיקיות ו-streams לקבצים, ועל כך שאפשר לקנן substorages ו-streams תחת ה-root storage. ↩
-
Microsoft Learn, Compound Files. על כך ש-compound files הם המימוש הסטנדרטי של Structured Storage ש-COM מספק, על כך שהם עובדים מעל מערכות קבצים שטוחות קיימות כפורמט עצמאי ממערכת קבצים שקבציו נפתחים לסירוגין בין FAT, NTFS ומערכות קבצים של Macintosh, ועל כך שהממשקים הסטנדרטיים מאפשרים למנות ולעיין באובייקטים שבפנים. ↩
-
Microsoft Learn, [MS-CFB]: Compound File Binary File Format. המפרט המפורסם של פורמט הבינארי של compound file: הגדרת מבנה דמוי מערכת קבצים ששומר streams של נתונים ייעודיים לאפליקציה בתוך קובץ אחד, ורשומות directory שמנות storages ו-streams יחד עם שדה ה-CLSID שלהם. ↩ ↩2 ↩3
מאמרים קשורים
מאמרים עדכניים עם אותן תגיות, להעמקה בנושאים קרובים.
איך clipboard ו-drag-and-drop עובדים — טיפול נכון ב-OLE data transfer באפליקציות עסקיות
למה הדבקת Excel מתפרקת ולמה paste נכשל אחרי סגירת המקור: clipboard formats, delayed rendering, OLE drag-and-drop, ומדיניות clipboard hist...
WinRT הוא COM — IInspectable, .winmd, language projections, ולמה WinUI עדיין יושב על חוזה בינארי
WinRT אינו managed runtime אלא ABI שנבנה על COM ועליו metadata של .winmd ו-language projections. מכסה IUnknown מול IInspectable, הגדרת HW...
Context menu ו-file association ב-Windows 11 — IExplorerCommand, MSIX ו-sparse package
ב-Windows 11 פריטי context menu של האפליקציה נדחקים מאחורי "הצג אפשרויות נוספות". המאמר מסביר את שרשרת extension → ProgID → verb, מגבלות ...
איך בונים פלט דוחות Excel: COM, Open XML ו-template
העיצוב של פלט דוחות Excel משתנה מאוד לפי השאלה אם מריצים את Excel באוטומציה, בונים xlsx ישירות, או משאירים VBA קיים. על בסיס אפליקציות Wi...
COM, ActiveX ו-OCX — ההבדלים והקשר ביניהם
מהו COM, מהו ActiveX ומהו OCX — סקירה מעשית של ההבדלים והקשר ביניהם, הזיקה ל-OLE, איפה זה בשימוש, ואיך כדאי להתייחס לזה היום.
נושאים קשורים
העמודים האלה ממקמים את הנושא בהקשר רחב יותר של שירותים והחלטות.
נושאים טכניים ב-Windows
שער לנושאי פיתוח Windows, חקירת תקלות וניצול נכסים קיימים.
העברת ActiveX
החלטות אם לשמר, לעטוף או להחליף רכיבי COM / ActiveX / OCX.
שירותים הקשורים לנושא הזה
המאמר קשור ישירות לשירותים הבאים.
פיתוח יישומי Windows
יישומים עסקיים, חיבור התקנים וכלי תקשורת, מהגדרת הדרישות ועד הפיתוח.
שימוש חוזר והעברה של נכסים קיימים
שימוש חוזר והעברה של נכסי COM / ActiveX / OCX ותלויות של 32 או 64 סיביות.
שאלות נפוצות
שאלות נפוצות בפניות בנושא המאמר.
- מה ההבדל בין embedding ל-linking?
- ההבדל הוא איפה נשמרים הנתונים עצמם. embedding שומר את נתוני האובייקט במלואם בתוך מסמך המארח. המסמך הופך לעצמאי מקובץ המקור, כך שמסירה למחשב אחר אף פעם לא שוברת הפניה (אם כי עריכה דורשת גם את אפליקציית המקור במחשב המקבל; בלעדיה אפשר רק לצפות ב-presentation cache אם אחד נשמר, ואובייקט שמוצג כאייקון אי אפשר לבדוק בכלל). בתמורה הקובץ גדל, ושינויים בנתוני המקור לא משתקפים במסמך. linking שם במסמך רק הפניה (שם ומקום של מקור הקישור), את הגדרת העדכון ומידע תצוגה, בעוד הנתונים עצמם נשארים בקובץ מקור הקישור. המסמך קטן ושינויים במקור הקישור יכולים להשתקף בו (אוטומטית או ידנית, לפי הגדרת העדכון של הקישור), אבל אם מקור הקישור מועבר או משנה שם כך שאי אפשר יותר לעקוב אחריו, הקישור נשבר. בוחרים איך להדביק בדיאלוג Paste Special או Insert Object.
- למה אי אפשר לפתוח או לערוך אובייקט מוטמע במסמך ב-double-click?
- הסיבה הנפוצה ביותר היא שאפליקציית המקור של האובייקט הזה לא מותקנת במחשב הנוכחי. עריכת אובייקט מוטמע מפעילה את אפליקציית המקור (OLE server), כך שבלי זה אפשר רק לצפות ב-presentation cache אם אחד נשמר, ואם האובייקט מוצג כאייקון אי אפשר אפילו לראות את התוכן. אם אפליקציית המקור קיימת והאובייקט עדיין לא נפתח, חושדים בסדר הזה: מקרה שבו הבדל גרסה דורש המרה, רישום COM class (CLSID) חסר או פגום שאפשר לתקן בהתקנה מחדש או דומה, קלקול בצד המסמך, ומקרה שבו הגדרות אבטחה חוסמות activation.
- למה קבצי Word ו-Excel הופכים גדולים באופן חריג עם אובייקטים מוטמעים?
- כי embedding הוא שיטה ששומרת עותק של הנתונים עצמם בתוך המסמך. מסמך שמחזיק אובייקט כ-embedding גדול בדרך כלל ממסמך שמחזיק את אותו אובייקט כקישור. בנוסף, המסמך בדרך כלל שומר presentation cache לצד הנתונים שמשמשים לעריכה (האם נשמר cache נקבע בהגדרה בזמן היצירה). כדי להקטין את הקובץ, האפשרויות הן לקשר במקום להטמיע, להדביק כתמונה (ולהשלים עם כך שעריכה מחדש אינה נחוצה), או לשתף את קובץ המקור בנפרד ולשים במסמך רק קישור או תמונה. קישורים, עם זאת, דורשים ניהול של מקור הקישור, ולכן אינם מתאימים למסמכים שמופצים.
- אחרי שהעברנו את ה-file server, האובייקטים המקושרים במסמכים הפסיקו להתעדכן. למה?
- כי מה שאובייקט מקושר מחזיק בתוך המסמך אינו הנתונים עצמם אלא רק מידע השם והמיקום של מקור הקישור (moniker), הגדרת העדכון, ו-presentation cache. כשמיקום מקור הקישור משתנה דרך העברת file server, שינוי שם תיקייה, שינוי נתיב share או דומה, ואי אפשר יותר לעקוב אחרי המיקום החדש, פתרון הקישור נכשל ורק ה-presentation cache הישן נשאר במסמך (לאובייקט שנוצר בהגדרה שלא שומרת cache, גם התצוגה הזו לא נשארת). כדי לתקן, מצביעים מחדש את נתיב מקור הקישור למיקום החדש מ-Edit Links בכל מסמך. שימו לב שאם הנתיב נכון והאובייקט עדיין לא מתעדכן, הקישור עשוי פשוט להיות מוגדר לעדכון ידני ולא שבור, לכן בודקים גם את הגדרת שיטת העדכון. אם יש הרבה מסמכים, עושים inventory של המסמכים שמכילים קישורים לפני ההעברה, ואם אפשר בונים עדכון קישורים גורף לתוך התוכנית.
- שמעתי ש-OLE objects הם סיכון אבטחה. בסדר להמשיך להשתמש בהם?
- המבנה של OLE, שמביא אובייקט של אפליקציה אחרת לתוך מסמך ומריץ אותו בצד שפותח, הוא גם אמצעי משלוח נוח לתוקפים, ופגיעויות arbitrary code execution דרך OLE objects מעוצבים שימשו בהתקפות ממוקדות אמיתיות. OLE packages, שיכולים לעטוף קובץ שרירותי, מסוכנים במיוחד, והנחיות ציבוריות כמו Essential Eight של ממשלת אוסטרליה ממליצות לאסור הפעלת OLE Package ב-Word, Excel ו-PowerPoint דרך הגדרות Registry. אין צורך באיסור גורף שמתפרש גם על embedding ו-linking רגילים במסמכים פנימיים; נקודת האמצע המציאותית היא לא לפתוח אובייקטים במסמכים ממקור לא ידוע, ולחסום הפעלת OLE Package ברמת הארגון.