דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. סגירת יישום לכל המשתמשים במחשב נוכחי (c#)

סגירת יישום לכל המשתמשים במחשב נוכחי (c#)

מתוזמן נעוץ נעול הועבר תכנות
3 פוסטים 3 כותבים 200 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • M מנותק
    M מנותק
    mekev
    כתב ב נערך לאחרונה על ידי
    #1

    סביבת פיתוח: c# from

    רקע:
    אני מריץ את התוכנה בשרת מקומי
    שמספר משתמשים מתחברים אליו במקביל (באמצעות RDP)

    כך שכל משתמש פותח ומשתמש בתוכנה עצמונית

    הקושי:
    ע"מ לבצע עדכוני תוכנה אני צריך שכל המשתמשים יסגרו את התוכנה הפתוחה אצלם
    היות וכידוע לא ניתן למחוק/להחליף קובץ פתוח שרץ ברקע

    שאלה:

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

    2. איך אני מבצע סגירה אוטומטית של התוכנית כל יום בשעה מסוימת
      (אני משער שמדובר בלולאת FOR הבודקת מה השעה, ולפי זה מפעילה IF, אשמח לעזרה בתחביר, ולהיכן להצמיד אותה)

    חגיח רפאלר 2 תגובות תגובה אחרונה
    0
    • חגיח מנותק
      חגיח מנותק
      חגי
      השיב לmekev ב נערך לאחרונה על ידי
      #2

      @mekev
      אתה יכול גם ליצור טריגר מהשרת שלך (איך אתה מתכנן לבצע עדכון מרחוק בלי זה?)

      בצורה הכי פשוטה שלא מצריכה הבנה ברשתות -
      אתה מעלה קובץ טקסט עם הגירסא של השרת לאיזה אתר פומבי כלשהו (אפשרי github),
      התוכנה בודקת כל כמה זמן (תבחר אתה כמה) באמצעות WebClient.DownloadString() את הגירסא המעודכנת (הURL צריך להיות לקובץ טקסט שהעלת), אם זה לא תואם לגירסא שקיימת ללקוח (זה יכול להיות בקובץ קונפיגורציה app.config, וזה גם יכול להיות משתנה גלובלי) אז התוכנה תבצע סגירה לכל הHandlerים הפתוחים, תעדכן את עצמה, ותבצע פתיחה מחדש של עצמה.

      ברגע שאתה רוצה לעדכן גירסא אתה פשוט משנה בקובץ טקסט שנמצא בגיטהאב את המספר גירסא.

      תגובה 1 תגובה אחרונה
      3
      • רפאלר מנותק
        רפאלר מנותק
        רפאל
        השיב לmekev ב נערך לאחרונה על ידי רפאל
        #3
        var current = Process.GetCurrentProcess();
        
        Process.GetProcessesByName(current.ProcessName)
               .Where(p => p.Id != current.Id)
               .ToList()
               .ForEach(p => p.Kill());
        
        current.Kill();
        

        הסבר בקצרה:

        1. קבלת התהליך הנוכחי.
        2. קבלת כל התהליכים הפעילים החולקים את שמם עם התהליך הנוכחי (מלבד התהליך הנוכחי עצמו - אנו זקוקים לשמר אותו בחיים בשלב זה).
        3. סגירת כל התהליכים שבתוצאה.
        4. סגירת התהליך הנוכחי.

        מומלץ להעדיף את השימוש בProcess.CloseMainWindow (המבקש מהתהליך בצורה מנומסת לסיים [Graceful exit]) על פני השימוש בProcess.Kill (המסיים את התהליך מייד, מה שעלול לגרום לתופעות שאינן רצויות) אם כי לא תמיד השימוש בו אפשרי, אולם תמיד ניתן להשתמש בProcess.Kill כFallback במקרה של כישלון:

          if (!p.CloseMainWindow()) p.Kill();
        

        קרדיט: Exit all instances of my app

        ** דוטנט מציעה מספר מחלקות טיימר (כדוגמת system.timers וsystem.threading.timer)

        תגובה 1 תגובה אחרונה
        6
        • dovidD dovid העביר נושא זה מ-תכנות ב-

        בא תתחבר לדף היומי!
        • התחברות

        • אין לך חשבון עדיין? הרשמה

        • התחברו או הירשמו כדי לחפש.
        • פוסט ראשון
          פוסט אחרון
        0
        • דף הבית
        • קטגוריות
        • פוסטים אחרונים
        • משתמשים
        • חיפוש
        • חוקי הפורום