Sluzba   zodpovězená otázka

C#, WinForms

Zdravim,

Potreboval bych poradit, potrebuji vytvorit sluzbu ktera kdyz zjisti spustenej program v pameti tak ho ukonci. Bohuzel se mi to nedari.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Threading;

namespace SimpleWindowsService
{
    public partial class SimpleService : ServiceBase
    {
        private BackgroundWorker BW;

        public SimpleService()
        {
            InitializeComponent();


            if (!System.Diagnostics.EventLog.SourceExists("SimpleSource")) 
                System.Diagnostics.EventLog.CreateEventSource("SimpleSource", "SimpleLog");
            eventLogSimple.Source = "SimpleSource";
            eventLogSimple.Log = "SimpleLog";

            BW = new BackgroundWorker();
            BW.WorkerSupportsCancellation = true;
            BW.DoWork += new DoWorkEventHandler(BW_DoWork);
            BW.RunWorkerCompleted += new RunWorkerCompletedEventHandler(BW_RunWorkerCompleted);
        }

        protected override void OnStart(string[] args)
        {
            BW.RunWorkerAsync(args);
            eventLogSimple.WriteEntry("Simple Service started!");
              

        }

        protected override void OnStop()
        {
            eventLogSimple.WriteEntry("Simple Service stopped!");
        }

        void BW_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            BW.CancelAsync();
            while (BW.IsBusy) Thread.Sleep(1000);
            eventLogSimple.WriteEntry(ServiceName + " completed");
        }

        void BW_DoWork(object sender, DoWorkEventArgs e)
        {
            while (!BW.CancellationPending)
            {
                System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcesses();
                foreach (System.Diagnostics.Process process in processes)
                {

                    if (process.ProcessName == "taskmgr.exe")
                    {

                        process.Kill();
                        eventLogSimple.WriteEntry("Proces " + process.ProcessNam + "byl ukončen!");
                    }

                }
                Trace.WriteLine("ComService: " + new Random().Next().ToString());
                Thread.Sleep(1000);
            }
        }
    }
}

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Můžete problém trochu blíže specifikovat? Tento kód s logováním již není prací úplného začátečníka, proto si myslím, že bližší popis problému by nebyl na škodu...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Problem je v tom, ze se cast kodu kde se zjistuje jestli je proces spusten a nasledne se ukonci kdyz je spusten, se vubec neprovede(logovani zmen, funguje bez problemu). Tento program je muj prvni pokus o praci se sluzbami, pravdepodobne jsem nekde udelal chybu, ale bohuzel nevim kde. Uz asi 5 dni se snazim neco nalezt na googlu, ale porad bez uspechu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Možná bych zkusil místo backgroundworkeru využít Timer. Problém to asi nevyřeší, ale kód se podle mě pročistí.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Měl bych několik výhrad. Jednak bych rozhodně nepoužíval BackgroundWorker, který je navržen pro práci ve Windows Forms, použil bych raději System.Threading.Timer.

Dále bych zvážil, jestli by nebylo jednodušší a efektivnější odepřít přístup k programu taskmgr.exe pro uživatele, kterých se to týká (váš program zabraňuje spuštění všem uživatelům).

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ihned to vyzkousim. Ten task manager je tam pouzit jen jako priklad na testovani. ve zkutecnosti ma sluzba testovat jestli je moje hlavni aplikace v pameti a pokavad ne tak ji spustit. Jen pro testovaci uceli jsem zvolil trosku jiny zpusob.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback