Nerds.dk - Hifi, Stereo & Lyd Community

Hjælp til IF-THEN-ELSE i batchfil.

Frontends, operativsystem, hardware, alm. opsætning m.m.

Hjælp til IF-THEN-ELSE i batchfil.

Indlægaf Bjur » søn jan 11, 2009 13:37

http://www.webwizforums.com
Available FREE: http://www.webwizforums.com
Copyright: Bruce Corkhill ©2001-2006. All rights reserved
******************************************************* */
//-->

Jeg har problemer med at DVBViewer ofte hænger, når jeg lukker det ned, så
Recording Service ikke starter op.
Derfor skal jeg have lavet en batch fil
der gør følgende:


1. Lukker DVBViewer ("C:\Program Files\DVBViewer\dvbviewer.exe" -x6)


2. Venter f.eks. 5 sekunder (@ECHO OFF timeout /T 5)


3. Her skal jeg have hjælp, da der skal laves en if-then-else, der gør
følgende:


IF dvbviewer.exe = active


THEN taskkill /F /IM DVBViewer.exe
NET STOP DVBVRecorder
@ECHO OFF
timeout /T 2
NET START DVBVRecorder
@ECHO OFF timeout /T 1
start ""
C:\"Program Files\Team MediaPortal"\MediaPortal\MediaPortal.exe "%1"


else
start "" C:\"Program Files\Team
MediaPortal"\MediaPortal\MediaPortal.exe "%1"


Så har brug for at få skrevet IF-THEN-ELSE ind i batchfilen.


Jeg har af en anden bruger fået en MPtray fil, der gør det, at når man
trykker på LIVE TV starter DVBViewer og evt. lukker MediaPortal hvis det er
omvendt og hvis man trykker på start knappen starter MediaPortal og evt. lukker
DVBViewer. Hvis man på en eller anden måde kan få den til at tjekke om recording
service kører, når DVBViewer er lukket ned og evt. starte den op, vil det være
endnu bedre end IF-THEN-ELSE i batch filen, den ellers virker perfekt udover
det. Configfilen ser ud som følger:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 
<appSettings>
    <add key="HomeKeyProcess" value
="MediaPortal"/>
    <add key ="HomeKeyProgramName"
value="MediaPortal.exe"/>
    <add key="HomeKeyProgramPath"
value="c:\Program Files\Team MediaPortal\MediaPortal\"/>
    <add
key="LiveTvKeyProcess" value="dvbviewer"/>
    <add
key="LiveTvKeyProgramName" value="dvbviewer.exe"/>
    <add
key="LiveTvKeyProgramPath" value="c:\Program Files\DVBViewer\"/>
 
</appSettings>
</configuration>


Men som sagt hvis jeg evt. kan få hjælp til en af de to, vil det være
super.

Bjur
Medlem
 
Indlæg: 81
Tilmeldt: fre jul 27, 2007 13:43

Indlægaf Patriarken » man jan 12, 2009 17:34

Here goes, med en gang slamkodning kun med metoder...

Kode: Vælg alt
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.ServiceProcess;
using System.Threading;
using Microsoft.Win32;
using System.Media;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
             InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
             RunCycle();
            
        }

        private void LaunchDVBviewerExitCMD()
        {
             //Find DVBviewer
             string strRegName;
             strRegName = Convert.ToString(
             Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wi ndows\CurrentVersion",
                   "ProgramFilesDir", ""));
             string strDVBviewer = "\\dvbviewer\\dvbviewer.exe";

             //Findes DVBviewer.exe pÃ¥ systemet?
             bool blReturn;
             blReturn = File.Exists(strRegName + strDVBviewer);
             if (blReturn)
             {
                 //Lukker DVBviewer Konventionelt, hvis den findes        
                 ProcessStartInfo dvbcc = new ProcessStartInfo();
                 dvbcc.FileName = strRegName + strDVBviewer;
                 dvbcc.Arguments = string.Format(@"-x6");
                 Process p = Process.Start(dvbcc);

             }
             else
             {

                 MessageBox.Show("Error: DVBVIEWER NOT FOUND ON SYSTEM");
                 this.Close();
             }
        }

        //Main Method:
        private void RunCycle()
        {
             Process[] processes = Process.GetProcessesByName("dvbviewer");
             if (processes.Length == 1)
             {
                 LaunchDVBviewerExitCMD();
                 Thread.Sleep(1500);
                 StartMP();
                 Thread.Sleep(3000);
                 RelaunchDVBviewer();
                 this.Close();
             }

             else
             {
                 StartMP();
             }
        }
        //Metode til Korrektion og restarts af Services..

        private void RelaunchDVBviewer()
        {
             Process[] processes = Process.GetProcessesByName("dvbviewer");
             if (processes.Length == 1)
             {
                 KillDVBviewer();
                 StopService();
                 Thread.Sleep(5000);
                 StartService();
                 this.Close();
             }
             else
             {
                 this.Close();
             }
      
      
        }


        //Metode til at Stoppe service


        private void StopService()
        {
             ServiceController sc = new ServiceController("DVBVRecorder");

             sc.Status.ToString();

             if ((sc.Status.Equals(ServiceControllerStatus.Running)) ||
                  (sc.Status.Equals(ServiceControllerStatus.StartPending)))
             {
              

                 sc.Stop();
             }
             else
             {
          
             }


        }

        // Metode til Start af Service
        private void StartService()
        {
             ServiceController sc = new ServiceController("DVBVRecorder");

             sc.Status.ToString();

             if ((sc.Status.Equals(ServiceControllerStatus.Stopped)) ||
                  (sc.Status.Equals(ServiceControllerStatus.StopPending)))
             {
                

                 sc.Start();
             }
             else
             {
            
             }

        }
        // Ekstern metode til at dræbe DVBViewer
        private void KillDVBviewer()
        {
             Process[] processes = Process.GetProcessesByName("DVBviewer");
             foreach (Process process in processes)
             {
                 process.Kill();
             }
        }

        private void StartMP()
        {
             string strMPpath = @"c:\Program Files\Team MediaPortal\MediaPortal\MediaPortal.exe";
            
             bool blReturn;
             blReturn = File.Exists(strMPpath);
             if (blReturn)
             {

                 ProcessStartInfo mp = new ProcessStartInfo();
                 mp.FileName = strMPpath;
                 mp.Arguments = string.Format(@"%1");
                 Process p = Process.Start(mp);
             }
             else
             {
                 MessageBox.Show("Error: MP not at default path");
                 this.Close();
             }
      
        }
  
    }
}


http://patriarken.mine.nu/DVBMPlaunch.zip
Don't be to proud of this technological terror you've constructed, the abillity to destroy a planet is insignificant next to the power of the force.
Brugeravatar
Patriarken
Seniormedlem
 
Indlæg: 594
Tilmeldt: tors mar 22, 2007 21:14
Geografisk sted: Aalborg

Re: Hjælp til IF-THEN-ELSE i batchfil.

Indlægaf Franz Dorfgezeit » man jan 12, 2009 18:50

Bjur skrev:Derfor skal jeg have lavet en batch fil

Hvad er en batch fil samt hvad til og hvorledes bruges den?

Brugeravatar
Franz Dorfgezeit
Medlem
 
Indlæg: 77
Tilmeldt: tirs jan 06, 2009 01:04

Indlægaf Bjur » man jan 12, 2009 19:26

Hey tak for det flotte arbejde. Ser ud til at virke:)
Bjur
Medlem
 
Indlæg: 81
Tilmeldt: fre jul 27, 2007 13:43

Indlægaf Bjur » tors feb 05, 2009 09:57

Hej Patriark, den fine fil du lavede, hvis det var muligt at få dig til at modificere den en smule vil det være perfekt.

Det lille problem opstår når DVBViewer lukkes, da der efterfølgende kommer et vindue op, der spørger om jeg virkelig vil lukke. Problemet er bare den er der i al for kort tid, så jeg næsten ikke når at vælge ja, inden den tvinger DVBViewer på den hårde måde til nedluk, hvilket medfører at jeg f.eks. mister de indstillinger jeg lavede mens programmet var åbent. Hvis det var muligt at lukke DVBviewer på en human måde først uden man skal vælge ja i vinduet og ellers lukke ned på den hårde måde og hvis det ikke er muligt, så evt. give det dobbelt eller tredobbelt den nuværende tid, så der er mulighed for at nå at lukke det inden den tvinger nedluk eller når at starte MediaPortal op inden.

Mange tak for hjælpen og god weekend.
Bjur
Medlem
 
Indlæg: 81
Tilmeldt: fre jul 27, 2007 13:43


Tilbage til HTPC


Hvem er online

Brugere der læser dette forum: Ingen tilmeldte og 2 gæster

Brugermenu

Brugernavn:

Adgangskode:

Markedspladsen

Der er ingen annoncer på brugtmarkedet pt.