משיב מוביל
שימוש בWMI queries כדי לדגום מידע מאפליקציה אחרת?

שאלה
-
שלום רב,
האם ניתן להשתמש בשאילתות WMI כדי לדגום מידע מאפליקציה אחרת?
אני יודע שאפשר לעשות דרך performance counter ודרך הWMI לקבל את המידע, הבעיה היא שperformancecounter מחזיר ערכים נומריים.
האם יש משהו דומה לperformancecounter שיחזיר ערכי מחרוזת?
לדוגמא, באפליקציית WMI - אני רוצה לדגום אפליקצייה אחרת שכתבתי ואשר מחזירה מחרוזת מסוימת, איך אוכל לבצע זאת?
תודה.
תשובות
-
א. התשובה היא כן, ועדיין לא קראתי את השאלה בכלל!
תמיד התשובה היא כן לגבי שאלה מסוג "האם אפשר?" במחשבים. תמיד אפשר והכל אפשר, הכל רק עניין של ידע ומשאבים.
* לא תמיד הדרך המסוימת שבחרת היא הדרך בה ניתן, אבל לכל מטרה יש פתרון. אם בחרת טכנולוגיה שלא מובנה בה משהו שרוצים לבצע אז אפשר לבחור טכנולוגיה אחרת... אבל כאמור לכל בעיה יש פתרון הוכל אפשרי.
ב. ולגבי השאלה :-)
הנה שתי אפשרויות בזריקה מהירה שנראות לי על פני השטח כמתאימות:
1. שימוש באפליקציית שירות (WCF למשל) כמתווכת. ב WMI להעביר הודעה אל השירות ובאפליקציה לפנות אל השירות כדי לקבל את המידע.
2. שימוש במסד נתונים כלשהו (במקרה הפשוט יכול להיות אפילו קובץ טקסט)
[Personal Site] [Blog] [Facebook]
- נערך על-ידי pituachMVP, Moderator יום חמישי 05 יוני 2014 18:56
- סומן כתשובה על-ידי Eran Sharvit יום שלישי 10 יוני 2014 06:32
כל התגובות
-
א. התשובה היא כן, ועדיין לא קראתי את השאלה בכלל!
תמיד התשובה היא כן לגבי שאלה מסוג "האם אפשר?" במחשבים. תמיד אפשר והכל אפשר, הכל רק עניין של ידע ומשאבים.
* לא תמיד הדרך המסוימת שבחרת היא הדרך בה ניתן, אבל לכל מטרה יש פתרון. אם בחרת טכנולוגיה שלא מובנה בה משהו שרוצים לבצע אז אפשר לבחור טכנולוגיה אחרת... אבל כאמור לכל בעיה יש פתרון הוכל אפשרי.
ב. ולגבי השאלה :-)
הנה שתי אפשרויות בזריקה מהירה שנראות לי על פני השטח כמתאימות:
1. שימוש באפליקציית שירות (WCF למשל) כמתווכת. ב WMI להעביר הודעה אל השירות ובאפליקציה לפנות אל השירות כדי לקבל את המידע.
2. שימוש במסד נתונים כלשהו (במקרה הפשוט יכול להיות אפילו קובץ טקסט)
[Personal Site] [Blog] [Facebook]
- נערך על-ידי pituachMVP, Moderator יום חמישי 05 יוני 2014 18:56
- סומן כתשובה על-ידי Eran Sharvit יום שלישי 10 יוני 2014 06:32
-
אני יודע שהרבה דברים אפשריים ומן הסתם אם לא - יש דרכים אחרות:)
העברת ההודעה אינה הבעיה כרגע - כרגע הבעיה היא קבלת נתונים מהסוג שרוצים, מה שרוצים זה לדגום אפליקציה ולקבל נתונים מהצורה הבאה:
נניח יש לי אפליקציה שכתבתי, כל כמה זמן היא שומרת מחרוזת מסוימת - למשל: "היי דויד" + DateTime.Now
ונניח יש לי אפליקציה נוספת - שכל מטרתה בחיים היא לבדוק מה קורה מול האפליקציה הראשונה - היא שולחת שאילתא מהסוג הבא - לדוגמא:"select a string from the first app" ומקבלת ערך מהסוג הבא: "היי דויד 12:18:00 06/06/14 "
אני לא רוצה לכתוב לטקסט אלא ישירות לקרוא מול האפליקציה - באותה הדרך שאפשר לשלוף ערכים מPerformanceCounter, הבעיה היא שPerformanceCounter לא מחזיקים ערכים מסוג מחרוזת אלא ערכים נומריים, אזי שאילתא מהסוג שאני רוצה לא עובדת..
-
הדברים שאתה רושם לא ברורים לי לחלוטין למרות שהם בטח ניראים לך ברורים כמי שמכיר את המערכת :-)
* "לדגום את האפליקציה"
אנחנו לא בדיוק דוגמים אפליקציה בצורה ישירה, אלא יכולים לשלוח אל אפליקציה request ולקבל חזרה response אם היא בנויה לכך (למשל אפליקציות REST כמו אתרי אינטרנט או שירות WEB, ולצורך העניין WCF יכול להיות כלי נהדר). ישנם אפליקציות בהם מובנה לנו האפשרות לשלוח request ויש כאלה שהנושא קצת יותר מורכז ומחייב למשל עבודה עם קוד NATIVE כמו למשל עבודה עם המתודה GetWindowText.
* אנחנו דוגמים COUNTER-ים של אפליקציות כמו למשל COUNTER של כמות זיכרון בשימוש במערכת ההפעלה, או כמות IO וכן הלאה. אלו לא מחזיקים מידע אלא בודקים את המידע ברגע מסוים ומחזירים אותו אל ה request.
* ניתן לשלוח מידע בעזרת WMI על ידי שימוש באירועים אל אפליקציות אחרות
http://msdn.microsoft.com/en-us/library/windows/hardware/ff563733(v=vs.85).aspx* בדוק אם הפרויקט הבא עוז לך:
http://code.msdn.microsoft.com/windowsdesktop/Using-WMI-with-C-4e5a9ee1* אני נשאר עם 2 הרעיונות שהצגתי מעל כפתרונות אפשריים לבעיה כפי שאני עדיין מבין אותה. אם האפליקציה שומרת את המידע אז המידע אינו COUNTER שמספק מידע חם ולכן כל מה שצריך זה לגשת להיכן שהמידע נשמר (מיקום משותף כמו מסד נתונים למשל) או ישירות לאפליקציה שיודעת להחזיר RESPON SE לפנייה שלנו.
[Personal Site] [Blog] [Facebook]