Avatar billede simsen Mester
15. november 2009 - 06:29 Der er 4 kommentarer og
1 løsning

Start without Debug mode fejler

Hej,

Jeg er ved at blive idiot......slet og ret....

Jeg knokler med nedenviste kode. Når jeg kører det i debug mode, sletter den pænt filerne som den skal - altså kører ind i men DeleteImages(imageWithPathName) funktion. MEN kører jeg uden debug mode, så går den ind IKKE ind i funktiongen (og sletter dermed ikke de billeder, jeg vil have den skal slette).

Jeg tror det måske, har noget at gøre med, at jeg ikke for lukket ordentligt ned for den foregående funktion, men som I kan se i koden, har jeg forsøgt alle mulige måder.....

Nogen der kan hjælpe mig, så den også uden debug mode, går ind i funktionen og sletter de billeder?

Kode:

protected void btnMakeImage_Click(object sender, EventArgs e)
    {
        string imageWithPathName = Constants.MakeImageFromVideo.imagePath + "Goal";

        try
        {
            Videos videos = new Videos();

            //Opretter billeder
            if (videos.CreateImageForVideo("Goal.avi") == Status.Success)
            {
            }
        }
        catch
        { }

        try
        {
            //Sletter billeder fra 1-19 og navneændre billede 20
            if (DeleteImages(imageWithPathName) == Status.Success)
            {

            }
        }
        catch
        { }
    }

public Status DeleteImages(string imageWithPathName)
    {
        Status status = Status.Failure;
        try
        {
            for (int i = 0; i < 20; i++)
            {
                File.Delete(Server.MapPath(imageWithPathName + i + ".jpg"));
            }
        }
        catch
        { }
        return status;
    }

public Status CreateImageForVideo(string videoName)
    {
        Status status = Status.Failure;

        try
        {
            Process p;
            ProcessStartInfo info = new ProcessStartInfo();
            info.FileName = HttpContext.Current.Server.MapPath(Constants.MakeImageFromVideo.fileName);
            info.WindowStyle = ProcessWindowStyle.Hidden;

            string videoPath = HttpContext.Current.Server.MapPath(Constants.MakeImageFromVideo.videoPath);
            string videoname = videoPath + videoName;
            string imagePath = HttpContext.Current.Server.MapPath(Constants.MakeImageFromVideo.imagePath);
            string extension = Getextension(videoName);
            string imagename = videoName;
            string imagenameWithoutExt = imagename.Replace("." + extension, "");
            string imagePathName = imagePath + imagenameWithoutExt;

            info.Arguments = " -i " + videoname + " -vframes 20 " + imagePathName + "%d.jpg";
            p = Process.Start(info);

            status = Status.Success;
            p.Close();
            p.Dispose();
            p.Kill();
            p.Refresh();
        }
        catch
        { }
        return status;
    }

mvh
simsen :-)
Avatar billede windcape Praktikant
15. november 2009 - 07:52 #1
Debug mode kan ikke have noget med det at gøre, medmindre du afhænger af nogle lokale filer, du har glemt at kopiere til /Release/ mappen.
Avatar billede simsen Mester
15. november 2009 - 11:14 #2
Hej windcape,

Se nu siger du måske noget interessant.....

I  CreateImageForVideo funktionen bruger jeg netop en exe fil, og den skal referere direkte til, hvor jeg har lagt den - nemlig i Bin mappen. (det er ikke en com objekt, så jeg kan ikke lave en reference)

Jeg fortæller stien her:

info.FileName = HttpContext.Current.Server.MapPath(Constants.MakeImageFromVideo.fileName);

Som oversat er:
public const string fileName = "~/Bin/ffmpeg.exe";

Jeg har ikke published siden......

Jeg gør så det, at jeg laver en "run to curser" ved

if (videos.CreateImageForVideo("Goal.avi") == Status.Success)
            {
            }

Og bruger efterfølgende F11 og den stepper ind i den næste funktion uden problemer nemlig:

if (DeleteImages(imageWithPathName) == Status.Success)
            {

            }

Hvis jeg så tager en Ctrl + F5 - altså uden debug, så ignorerer den fuldstændig

if (DeleteImages(imageWithPathName) == Status.Success)
            {

            }
Avatar billede bvli Praktikant
15. november 2009 - 17:13 #3
Det aller første du skal gøre er at - enten fjerne dine try / catch's eller også gøre et eller andet i din catch, så du kan se at en fejl er sket. I første omgang ville jeg nok bare skrive "throw;" og se om ikke det viser hvor dit program fejler.

Det er altid en dårlig ide at lave tomme catch-statements. Hvis ikke man kan håndtere den exception der bliver smidt, skal man lade den komme videre op i call stack'en.
Avatar billede simsen Mester
15. november 2009 - 19:43 #4
bvli

Den går ikke ind i catch - og jeg har nu sat en throw ind......den går stadig ikke ind i catch delen.
Avatar billede simsen Mester
14. april 2010 - 00:54 #5
Opgav denne
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester