AppDomain ב C# כמה שאלות

yosi44441

New member
AppDomain ב C# כמה שאלות

ראיתי את הסרטון
https://www.youtube.com/watch?v=DUq84e3cZyo
לפי מה שהוסבר שם כאשר אני משתמש ב DLL חיצוני שאני מפחד שהוא יעשה לי ביעות אבטחה(לדוגמא שיצור/ימחק קבצים שהוא לא צריך) אני מעדיף לא להכניס אותו מתוך ה AppDomain עם ההרשאות שלי אלא אפתח לו AppDomain עם ההרשאות המינימאליות שהוא צריך

1-מה הייתרון של זה לבין ליצור לו פרוסס נפרד עם הרשאות(מתוך הקוד)?
2- לפי מה שנראה שם כאשר אני רוצה לפתוח AppDomain ל DLL הוא חייב להיות עם אטריביוט של Serializable מדוע? וזה נראה חסרון רציני, לא כל EXE או DLL שארצה לעשות לו את זה יהיה לו את האטריביוט הזה.?
3-ברגע מפעיל את המתודה CreateInstanceAndUnwarp ה AppDomain מתחיל לרוץ וה AppDomain שהפעיל אותו לא מחכה לו,נכון? רצים כאילו במקביל כמו 2 תהליכונים?
4- האם זה אפשרי לפתוח AppDomain מ C# ולהפעיל קובץ פייתון/שנכתב ב CPP או רק קבצים שנוצרו ב C#

רב תודות
 

Royi Namir

New member
>

1 - הייתרון של זה הוא בכך שאתה יכול לטעון DLLS שלמים שאתה לא יודע בדיוק מה קורה שם ואתה רוצה לוודא שהוא לא יעשה דברים מסויימים. אז אתה טוען ומצמיד לו הרשאות.
יש עוד דרך שאתה יכול לעשות זאת בכך שאתה יכול ליצור THREAD עם הרשאות - IMPERSONATION.
עוד יתרון זה שאם ה APPDOMAIN הזה נופל - CRASH - אז הוא לא מפיל לך את ה APP POOL שלך. ( כמובן שתוכל גם על ידי TRY CATCH מסביב ל THREAD שדיברתי עליו - אבל יש EXCEPTIONS שמפילים APP POOL אם תירצה או לא תרצה כגון STACKOVERFLOW.

2 - ה SERIALIZEABLE הוא בשביל ש ה APP DOMAIN שלך ידבר עם החדש שיצרת ע"י MARSHALL BY REF.

3 - נראה לי שכן. תוכל לבדוק זאת בעצמך אם תריץ את הקןד עם BREAKPOINT ואז תראה ב TASKMANAGER אם יש לך שם 2 EXE של APP POOL.

4- השאלה הזאת מתנקזת להאם אפשר לטעון קוד UNAMANGED מ #C. התשובה היא כן.
 

yosi44441

New member
שאלה שלא הבהרת

ראשית תודה על תשובתך
לא הבנתי מה הייתרון בלהפעיל את ה DLL או ה EXE על אפ-דומיין נפרד מאשר על פרוסס נפרד
2 האפ-דומיין רצים בתוך אותו פרוסס משמע הם חולקים את אותו זמן CPU , מאשר אם הייתי נותן ל DLL הזה פרוסס נפרד התהליך היה מסתיים מהר יותר(בהנחה סבירה שיש לי פרוסס פנוי)
לא מצליח להבין מה החילוק בין להריץ משהו חיצוני על אפ-דומיין /פרוסס נפרד
&nbsp
בנוסף, אם אני לא רוצה שהוא ידבר איתו, עדיין זה קצת בעייתי שמחוייב שהצד שלישי שאני מפעיל יהיה Serializable
&nbsp
תודה
 

Royi Namir

New member
התבלבלתי ובילבלתי אותך

אני כותב לך ואני חשוב בכלל על APPPOOL

יהיה לך EXE אחד - פרוסס
ובו יש כמה כמה APPDOMAINS.
היתרון בזה הוא שאתה יכול להצמיד הרשאות ל DLL שאתה מעלה

נניח ולאפליקציה שלך יש הרשאות לגעת בכל התיקיות ואתה רוצה שהAPPDOMAIN שאתה יוצר - לא יוכל לגעת בשום תיקיה ( כמו שבסרטון) - במקרה הזה אתה טוען את ה APPDOMIAN ומצמיד לו הרשאות שאתה בוחר - ואז אתה לא צריך לפחד או לחשוש שהוא יגע לך בקבצים בC.

אין כאן 2 פרוססים

יהיו לך 2 פרוססים אם יהיהו לך 2 APP POOL.

עוד משהו.
PROCESS זה וירטואליזציה של זיכרון
THREAD זה וירטואליזציה של CPU
לשניהם אתה יכול לתת PRIORITY

אז אם יש לך EXE אחד של APPPOOL ( כי לא נוצר עוד EXE אחד - כפי שבילבלתי אותך ממקודם) - אתה עם EXE אחד.
אז אין לך לתת ל PROCESS האחר עדיפות

עוד יתרון זה שאתה יכול לעשות UNLOAD ל ASSEMBLY ישר אחרי שסיימת להשתמש בו. ( דבר שלא אפשרי אילולא היית טוען אותו באופן רגיל - אלא אם כן אתה סוגר את ה אפליקציה שלך)
 

yosi44441

New member
זו השאלה

הרי אני יכול מהאפליקציה שלי לעשות יצירה של פרוסס חדש ולהריץ בו מה שאני רוצה
השאלה שלי היא מה ההבדל אם אריץ את ה DLL החיצוני ע"י פרוסס שאצור או ע"H אפ-דומיין שאצור
בשניהם אפשר לתת הרשאות
 

Royi Namir

New member
שלא תעיז

צריכה להיות סיבה מאד
מאד טובה שאתה נותן לאפליקציה שלך הרשאות להריץ EXE.
תחשוב על העיתיות שבה. HACKER יכול לנצל את זה ולקחת לך את הקונפיג ובכלל לעשות לך כל מה שהוא חושק. אתה אשכרה נותן לו גישה ל מחשב שלך
אל תעשה את זה - כי לא עושים את זה.

לגבי ההבדלים אני חושב שעניתי לך
אבל אתה נכנס בשאלתך לעולם שבו אתה יכול לתת גישה להאקר לגעת לך ב FILE SYSTEM - ועם זה - אני פשוט לא יכול לעזור לך כי זה דברים שלא עושים

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

AppDomain מאפשר לך ״להתחיל מאפס״.
זה אומר, למשל, שמשתנים סטטיים וסינגלטונים - מאותחלים מחדש, כי אתה מקבל מרחב זיכרון (וירטואלי) שהוא נקי לגמרי.
בנוסף, יכול להיות שבמסגרת AppDomain תוכל לטעון DLLים מגירסאות שונות מאלו שנטענו לך ב AD הראשי.
כל זה, מבחינת ביצועים, עדיף על פני פרוסס חיצוני. ובנוסף, כמו שרועי ציין קודם, ברמת ההרשאות זה נשמע פירצה רצינית להריץ פרוסס חיצוני.
&nbsp
HTH
 
למעלה