Avatar billede sajbar Nybegynder
12. juni 2006 - 10:52 Der er 1 kommentar og
1 løsning

Problem med system service

Hej eksperter.

Jeg sidder her og bliver godt skaldet efterhånden da jeg har revet en god potion hår ud af hovedet.

Jeg er ved at lave et program som skal kigge ud på com-porten og se om der er forbindelse, er der det skal der gøres nogle ting, har forbindelsen været åben før og den så bliver lukket igen skal der gøres noget andet.

Mit problem er at jeg i den klasse/tråd som kigger ud på com-porten ikke kan sætte den variabel som fortæller hoved programmet at forbindelsen er lukket/åben.
Programmet compiler fint men når jeg forsøger at debugge den får jeg følgende fejl:

SurfCenter.SurfCenter.open   
'SurfCenter.SurfCenter' does not contain a definition for 'SurfCenter'

Kode:
Service.cs

using System;
using System.Diagnostics;
using System.ServiceProcess;
using System.IO.Ports;
using System.Threading;
using System.IO;
using Microsoft.Win32;
using System.Timers;


namespace SurfCenter
{
    public partial class SurfCenter : ServiceBase
    {
        //variabel som globalt holder styr på om forbindelsen er åben eller lukket
        public static int open;

        //variabel der fortæller om det er første gang at programmet modtager et disconnect fra com-porten
        public static int firstdisconnect;
       
        //variabel der fortæller om det er første gang at progammet modtager et connect fra com-porten
        public static int firstconnect = 1;
       
        //thread til at lytte på comporten efter connect/disconnect
        Thread traad;
       
        //thread til at fortælle databasen at maskinen stadigvæk er online.
        Thread otraad;
       
        public static int lopen = 0;

        public SurfCenter()
        {
            InitializeComponent();
                       
        }

        protected override void OnStart(string[] args)
        {
            //disable mus og keyboard ved opstart.

            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.EnableRaisingEvents = false;
            proc.StartInfo.FileName = "C:\\sc\\Devcon.exe";
            proc.StartInfo.Arguments = "remove HID* >null";
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            proc.Start();
            proc.WaitForExit();

            //sæt timers op - uendelig løkke fejler i system services
            System.Timers.Timer aTimer = new System.Timers.Timer();
            aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
            aTimer.Interval = 1000;
            aTimer.Enabled = true;
            GC.KeepAlive(aTimer);
                       
            otraad = new Thread(new ThreadStart(this.onlinefunction));
            otraad.Start();         
        }

        protected override void OnStop()
        {
            // TODO: Add code here to perform any tear-down necessary to stop your service.
        }
        public void OnTimedEvent(object source, EventArgs e)
        {
            traad = new Thread(new ThreadStart(this.treadfunction));
            traad.Start();
            Thread.Sleep(2000);
            if (open == 1)
            {
                //Hvis forbindelsen var lukket før.
                if (lopen == 0)
                {
                    //logonting udføres
                    lopen = 1;
                    this.connect();
                }
            }
            else
            {
                //hvis forbindelsen var åben før
                if (lopen == 1)
                {
                    this.disconnect();
                    //lav logofting
                    //fortæl programmet at forbindelsen er lukket
                    lopen = 0;
                }
            }
        }


        public void connect()
        {
            if (firstconnect == 1)
            {
                //keyboard og mus enables.
                ProcessStartInfo startInfo = new ProcessStartInfo("C:\\sc\\Devcon.exe");
                startInfo.WindowStyle = ProcessWindowStyle.Hidden;
                startInfo.Arguments = "rescan >null";
                Process.Start(startInfo);

                //vi logger af så vi kan vælge sprog.
                ProcessStartInfo startInfo1 = new ProcessStartInfo("c:\\sc\\logout.bat");
                startInfo1.WindowStyle = ProcessWindowStyle.Hidden;
                Process.Start(startInfo1);

                //enable usbstorage
                RegistryKey OurKey = Registry.LocalMachine;
                OurKey = OurKey.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\UsbStor", true);
                OurKey.SetValue("Start", 3);
                OurKey.Close();

                //fortæl programmet at næste connect er det første der er modtaget.
                firstconnect = 0;
            }

        }

        public void disconnect()
        {
            //hvis det er første gang vi modtager et disconnect fra møntindkastet skal vi ikke gøre noget
            if (firstdisconnect == 0)
            {
                firstdisconnect = 1;
            }
            else
            {
                //keyboard og mus disables
                System.Diagnostics.Process proc = new System.Diagnostics.Process();
                proc.EnableRaisingEvents = false;
                proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                proc.StartInfo.FileName = "C:\\sc\\Devcon.exe";
                proc.StartInfo.Arguments = "remove HID* >null";
                proc.Start();
                proc.WaitForExit();

                //Vi logger brugeren af skype, msn messenger og lukker alle internet explore ned
                System.Diagnostics.Process proc1 = new System.Diagnostics.Process();
                proc1.EnableRaisingEvents = false;
                proc1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                proc1.StartInfo.FileName = "C:\\sc\\killall.exe";
                proc1.StartInfo.Arguments = "iexplore";
                proc1.Start();
                proc1.WaitForExit();

                System.Diagnostics.Process proc2 = new System.Diagnostics.Process();
                proc2.EnableRaisingEvents = false;
                proc2.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                proc2.StartInfo.FileName = "C:\\sc\\killall.exe";
                proc2.StartInfo.Arguments = "skype";
                proc2.Start();
                proc2.WaitForExit();

                System.Diagnostics.Process proc3 = new System.Diagnostics.Process();
                proc3.EnableRaisingEvents = false;
                proc3.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                proc3.StartInfo.FileName = "C:\\sc\\killall.exe";               
                proc3.StartInfo.Arguments = "msnmsgr";
                proc3.Start();
                proc3.WaitForExit();

                System.Diagnostics.Process proc4 = new System.Diagnostics.Process();
                proc4.EnableRaisingEvents = false;
                proc4.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                proc4.StartInfo.FileName = "C:\\sc\\killall.exe";
                proc4.StartInfo.Arguments = "explorer";
                proc4.Start();
                proc4.WaitForExit();

                System.Diagnostics.Process proc5 = new System.Diagnostics.Process();
                proc5.EnableRaisingEvents = false;       
                proc5.StartInfo.FileName = "c:\\program files\\Internet Explorer\\IEXPLORE.EXE";
                proc5.StartInfo.Arguments = "http://www.surf-center.dk/" + getMac();
                proc5.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
                proc5.Start();

                //disable usb-storage
                RegistryKey OurKey = Registry.LocalMachine;
                OurKey = OurKey.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\UsbStor", true);
                OurKey.SetValue("Start", 4);
                OurKey.Close();

                //vi nustiller tælleren der holder øje med antalet af disconnect og fortæller programmet at når den modtager et connect skal der åbnes/startes
                firstdisconnect = 0;
                firstconnect = 1;
            }

        }
        //funktion til at retunere mac-adressen med.
        public string getMac()
        {
            FileStream file = new FileStream("d:\\sc\\mac.txt", FileMode.Open, FileAccess.Read);
            StreamReader sr = new StreamReader(file);
            string mac = sr.ReadLine();
            sr.Close();
            sr.Dispose();
            file.Dispose();

            return mac;
        }

        //start lytte tråden
        public void treadfunction()
        {
            tread Tread;
            Tread = new tread();
            Tread.run();
        }

        //starter tråden der fortæller databasen at maskinen stadigvæk er online
        public void onlinefunction()
        {
            onlinetjek oline;
            oline = new onlinetjek();
            oline.run();
        }

   
    }
    class tread
    {
        public void run()
        {
            SerialPort sp = new SerialPort();
            try
            {
                //åben en forbindelse til com-porten så vi kan læse/skrive til den.
                sp.Open();
            }
            catch (UnauthorizedAccessException)
            {
                //sikre at programmet ikke dør hvis en tråd ikke har sluppet taget i com-porten
            }
            try
            {
                //prøv at skrive til com-porten
                sp.ReadTimeout = 100;
                sp.WriteLine("test");
                //prøv at modtage fra com-porten
                string r = sp.ReadLine();
                //vi ryder op og lukker forbindelsen til com-porten
                sp.Close();
                sp.Dispose();
                //fortæller hovedprogrammet at der er penge i maskinen
                SurfCenter.open = 1;
                SurfCenter.open = 1;
                //open = 1;
            }
            catch
            {
                //ryd op efter os selv og fortæl hovedprogrammet at der ikke er forbindelse til com-porten. dvs. ingen penge indkastet
                sp.Close();
                sp.Dispose();
                SurfCenter.open = 0;
            }
        }
    }

    public class onlinetjek
    {
        public void run()
        {
            while (true)
            {
                //sov 2 minuter.
                Thread.Sleep(120000);
                //hvis der er penge i maskinen
                if (SurfCenter.open == 1)
                {
                    //fortæl databasen at vi stadigvæk er online
                    System.Diagnostics.Process proc = new System.Diagnostics.Process();
                    proc.EnableRaisingEvents = false;
                    proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                    proc.StartInfo.FileName = "C:\\sc\\stillhere.bat";
                    proc.Start();
                    //ProcessStartInfo startInfo = new ProcessStartInfo("C:\\sc\\stillhere.bat");
                    //startInfo.WindowStyle = ProcessWindowStyle.Hidden;
                    //Process.Start(startInfo);
                }
            }
        }
    }
   
}

Program.cs

using System.Collections.Generic;
using System.ServiceProcess;
using System.Text;
using System;
using System.ComponentModel;
using System.Data;
using System.IO.Ports;
using System.Threading;
using System.IO;
using System.Net;
using Microsoft.Win32;
using System.Diagnostics;


namespace SurfCenter
{
 

    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
            ServiceBase[] ServicesToRun;

            // More than one user Service may run within the same process. To add
            // another service to this process, change the following line to
            // create a second service object. For example,
            //
            //  ServicesToRun = new ServiceBase[] {new Service1(), new MySecondUserService()};
            //
            ServicesToRun = new ServiceBase[] { new SurfCenter() };

            ServiceBase.Run(ServicesToRun);
        }
    }
}

Derudover kan det godt passe at jeg ikke kan starte Internet Explorer fra en system service uden at den er minimeret ? - den bliver ikke engang vist på taskbaren

Håber der er nogen der kan hjælpe mig
Avatar billede sajbar Nybegynder
20. december 2006 - 15:11 #1
hov gammelt spørgsmål jeg aldrig har fået lukket.

Jeg lavede en hjælpe klasse med en variabel til at holde styr på det

og med hensyn til problemet med internet explorer så var tricket at servicen skulle startes med ret til at "interact with desktop"
Avatar billede sajbar Nybegynder
20. december 2006 - 15:11 #2
svar
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