Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

Aktivity
Avatar
Michaal.K
Člen
Avatar
Michaal.K:7.8.2018 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.8.2018 10:23
Avatar
jiri.sada
Tvůrce
Avatar
jiri.sada:9.8.2018 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.8.2018 17:10
Avatar
Michaal.K
Člen
Avatar
Odpovídá na jiri.sada
Michaal.K:10.8.2018 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.8.2018 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.