2010-01-15 13 views
9

वहाँ डॉट नेट कोडपुनः आरंभ खिड़कियों डॉट का उपयोग करके ऐप शुद्ध

मेरा मतलब है अनुप्रयोग से बाहर और खुद को पुनः आरंभ, एक बटन के क्लिक पर करना चाहिए का उपयोग कर एक विंडोज़ अनुप्रयोग डॉट नेट में लिखा पुनः आरंभ करने का कोई तरीका है

उत्तर

9

Application.Restart() अपने विधि :)

Here एक और StackOverflow जवाब यह है कि इस पद्धति का उपयोग के साथ "घड़ी से बाहर के लिए है" के एक जोड़े बताते है।

0

मुझे एक ही समस्या थी, लेकिन मेरा अप्रबंधनीय स्मृति रिसाव से संबंधित था कि मुझे एक ऐप पर नहीं मिला जो 24/7 चलाना है। ग्राहक के साथ मैं सहमत हूं कि ऐप को पुनरारंभ करने के लिए सुरक्षित समय 03:00 AM था यदि स्मृति खपत परिभाषित मान से अधिक थी।

मैंने Application.Restart की कोशिश की, लेकिन ऐसा लगता है कि यह कुछ तंत्र का उपयोग करता है जो पहले से चल रहा है, जबकि नया उदाहरण शुरू होता है, मैं एक और योजना के लिए चला गया। मैंने उस चाल का उपयोग किया जो फाइल सिस्टम हैंडल तब तक जारी रहता है जब तक उन्हें मरने की प्रक्रिया न हो। तो, एप्लिकेशन से, मैंने फ़ाइल को डिस्क पर गिरा दिया, और Dispose() हैंडल नहीं किया। मैंने फाइल को 'खुद' निष्पादन योग्य और निर्देशिका शुरू करने के लिए भी इस्तेमाल किया (लचीलापन जोड़ने के लिए)।

कोड:

_restartInProgress = true; 
string dropFilename = Path.Combine(Application.StartupPath, "restart.dat"); 
StreamWriter sw = new StreamWriter(new FileStream(dropFilename, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)); 
sw.WriteLine(Application.ExecutablePath); 
sw.WriteLine(Application.StartupPath); 
sw.Flush(); 
Process.Start(new ProcessStartInfo 
{ 
    FileName = Path.Combine(Application.StartupPath, "VideoPhill.Restarter.exe"), 
    WorkingDirectory = Application.StartupPath, 
    Arguments = string.Format("\"{0}\"", dropFilename) 
}); 
Close(); 

Close() अंत में एप्लिकेशन बंद आरंभ होता है, और फ़ाइल संभाल मैं यहाँ खुला आयोजित की जाएगी जब तक प्रक्रिया वास्तव में मर जाता है StreamWriter के लिए इस्तेमाल किया। फिर ...

Restarter.exe कार्रवाई में आता है। यह फ़ाइल को अनन्य मोड में पढ़ने के लिए प्रयास करता है, जब तक कि मुख्य ऐप मर नहीं जाता तब तक पहुंच प्राप्त करने से रोकता है, फिर मुख्य ऐप शुरू होता है, फ़ाइल हटा देता है और मौजूद है। मुझे लगता है कि यह आसान नहीं हो सकता है:

static void Main(string[] args) 
{ 
    string filename = args[0]; 
    DateTime start = DateTime.Now; 
    bool done = false; 
    while ((DateTime.Now - start).TotalSeconds < 30 && !done) 
    { 
     try 
     { 
      StreamReader sr = new StreamReader(new FileStream(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)); 
      string[] runData = new string[2]; 
      runData[0] = sr.ReadLine(); 
      runData[1] = sr.ReadLine(); 
      Thread.Sleep(1000); 
      Process.Start(new ProcessStartInfo { FileName = runData[0], WorkingDirectory = runData[1] }); 
      sr.Dispose(); 
      File.Delete(filename); 
      done = true; 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
     Thread.Sleep(1000); 
    } 
} 
संबंधित मुद्दे