Předvánoční Black Friday Předvánoční Black Friday
Až 80% zdarma! Předvánoční BLACK FRIDAY akce. Více informací

Diskuze: C# winform - restart app a následné pokračování

C# .NET .NET (C# a Visual Basic) C# winform - restart app a následné pokračování American English version English version

Aktivity (3)
Avatar
Michaal.K
Člen
Avatar
Michaal.K:7. srpna 10:23

Ahoj,
mám problém s restartováním aplikace, pokud v try a následně v podmínce provedu restart aplikace a ta skončí s chybou skočím do catch, kde provedu podmínky, ale nezobrazí se mi MessageBox.
Ale následné ukonceniFormu() a Application.Res­tart() se normálně provede a vše funguje.
Nevím proč se ten messageBox nezobrazí, tím pádem ani nedám uživateli vědět že se něco stalo a já vrátil změny zpět. Nevíte prosím někdo čím to je a jako to vyřešít??
Díky moc.

try
{
    if ((jeCelyStazen == true) && (testVelSoub(cestaKNovProg) == true))    // Testuji zda se stahl novy exe soubor cely (zjistuji podle prijatych bajtu a porovnavam s celkovymi bajty souboru) a zaroven jestli neni stazeny exe soubor nulovy
    {
        MessageBox.Show("Stahování bylo dokončeno a aplikace byla úspěšně aktualizována.\nNyní bude proveden restart aplikace.", this.formName, MessageBoxButtons.OK, MessageBoxIcon.Information);
        Application.Restart();                                             // Provedu restart aplikace
        smazaniSouboru(cestaKNovProg);                                     // Smazu novy exe soubor ve slozce Update
    }
    else
    {
        MessageBox.Show("Aktualizační soubor se nepodařilo stáhnout celý nebo je poškozen.\nOpakujte aktualizaci později.", this.formName, MessageBoxButtons.OK, MessageBoxIcon.Error);
        ukonceniFormu();                                                   // Zavolam metodu na ukonceni aktualizacniho formu
        return;
    }
}
catch
{
    // Aktualizace programu nedopadla vratim zmeny zpet
    if ((File.Exists(cestaKProgramu) == false) && (File.Exists(cestaKZalProg) == true))   // Pokud neni stary exe soubor a zaroven je novy bak soubor
    {
        File.Move(cestaKZalProg, cestaKProgramu);                          // Prejmenuji bak soubor zpatky na exe
    }
    if ((File.Exists(cestaKProgramu) == true) && (File.Exists(cestaKNovProg) == true) && (File.Exists(cestaKZalProg) == true))      // Testuji zda existuji dane soubory
    {
        if ((porovnaniDvouSoub(cestaKProgramu, cestaKNovProg) == true) && (File.Exists(cestaKZalProg) == true))         // Pokud jsou velikostne stejne soubory novy exe a stary exe a zaroven existuje bak
        {
            smazaniSouboru(cestaKProgramu);                                // Smazu novy exe soubor (prekopirovany ze slozky Update) ve slozce programu
            File.Move(cestaKZalProg, cestaKProgramu);                      // Prejmenuji bak soubor zpatky na exe
        }
    }
    MessageBox.Show("Aktualizace programu se nezdařila!\nProvedené změny byly vráceny.\nOpakujte aktualizaci později.", this.formName, MessageBoxButtons.OK, MessageBoxIcon.Error);
    ukonceniFormu();                                                       // Zavolam metodu na ukonceni aktualizacniho formu
    Application.Restart();                                                 // Spustim puvodni aplikaci
}
 
Odpovědět 7. srpna 10:23
Avatar
jiri.sada
Redaktor
Avatar
jiri.sada:9. srpna 17:10

Protože zobrazíš Messagebox a pak aplikaci hned vypneš tím restartem, je to jako když nedáš na konec konzolového programu ReadLine()

 
Nahoru Odpovědět 9. srpna 17:10
Avatar
Michaal.K
Člen
Avatar
Odpovídá na jiri.sada
Michaal.K:10. srpna 9:57

Ahoj,
díky za info. Už jsem se k tomu také dopracoval, že to způsobuje restart.
Nakonec jsem to vyřešil takto:

Process.Start(cestaKProgramu);          // Spustim novou verzi programu
smazaniSouboru(cestaKNovProg);          // Smazu novy exe soubor ve slozce Update
Process.GetCurrentProcess().Kill();     // Ukoncim proces stare verze programu

A už to funguje :-)

 
Nahoru Odpovědět 10. srpna 9:57
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.