Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

c# Windows service i pokretanje eksternog procesa

[es] :: .NET :: c# Windows service i pokretanje eksternog procesa

[ Pregleda: 1369 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Aleksandrov

Član broj: 47782
Poruke: 161
*.ns.ac.yu.



Profil

icon c# Windows service i pokretanje eksternog procesa15.05.2009. u 11:27 - pre 181 meseci
Code:

using System.Diagnostics;
...
  Process prDate = new Process();
  try
     {
      prDate.StartInfo.FileName = "Cmd.exe";
      prDate.StartInfo.Arguments = "/C \"DATE " + NoviDatumVreme.Day + "-" + NoviDatumVreme.Month + "-" + NoviDatumVreme.Year;
      //prDate.StartInfo.CreateNoWindow = true;
      //prDate.StartInfo.UseShellExecute = false;
      prDate.Start();
      .....


Imam ovaj deo koda koji dobro radi kad se ubaci u Windows Console Application medjutim u windows service okruzenju se ne ponasa kako sam zamislio.

Kod je dosta jednostavan i treba da promeni sistemski datum.

Moze li neko da mi objasni gde gresim... :(

2.
Ima li neko iskustva sa debagovanjem windows service aplikacija??? Na koji nacin vi to radite?
---------------------
****
< 9 9 > My name
..( o ).. is
. . -- . .MX86251 ?
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: c# Windows service i pokretanje eksternog procesa15.05.2009. u 12:30 - pre 181 meseci
Servise bi trebalo da pises tako da su autonomni i da ne zahtevaju nikakve kontakte sa korisnikom, sto u tehnickom smislu znaci zaboravi na GUI i na keybaord/mouse input i sve komponente koje od njega zavise. Konzola je jedna od njih a sa cmd.exe otvaras sistemsku konzolu koja ne moze da funkcionise jer nema gde da ispise izlaz i i nema odakle da uzme ulaz bez obzira na to sto tebi taj ulaz i izlaz ne trebaju. Da promenis sistemsko vreme koristi ovaj code (rasporedi sta gde ide):

Code:

using System.Runtime.InteropServices;

...

// deklaracije
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEMTIME 
{
public short wYear;
public short wMonth;
public short wDayOfWeek;
public short wDay;
public short wHour;
public short wMinute;
public short wSecond;
public short wMilliseconds;
}

// interop poziv u kernel32
[DllImport("kernel32.dll", SetLastError=true)]
public static extern bool SetSystemTime([In] ref SYSTEMTIME myTime );


...

// promena vremena
SYSTEMTIME myTime = new SYSTEMTIME();
myTime.wYear = 2009; 
myTime.wMonth = 5; 
myTime.wDay = 15;
myTime.wHour = 13;
myTime.wMinute = 26;
myTime.wSecond = 00;

SetSystemTime(ref myTime);

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: c# Windows service i pokretanje eksternog procesa15.05.2009. u 12:36 - pre 181 meseci
E da, za debug


Imas dva nacina

1. Enkapsuliras servis u poseban DLL i posebnu klasu koja ima start/stop metode, sta vec nema i onda napravis konzulnu aplikaciju koja ce da imitira SCM i poziva start/stop itd. Sam servis onda sluzi samo da ucita DLL i da na onstart pozove start, na onstop pozove stop itd. Debugining je onda lak jer debsagujes iz konzolne aplikacije. Naravno u ovom tvom slucaju ne bi pomoglo jer bi tokom debagovanja imao korisnicki kontekst, ovo je vise za debagovanje bugova u tvom kodu.

2. Unutar onStart metoda ubacis Thread.Sleep(15000), to ce ti dati 15 sekundi zadrske nakon pokretanja servisa iz SCMa. U tih 15 sekundi moras da attachujes debuger iz visual studia na proces servisa (posle par puta uspevaces da to uradis za par sekundi). Ne zaboravi da stavis breakpoint na prvu komandu iza sleep i program ce stati posle sleep prosto



Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Aleksandrov

Član broj: 47782
Poruke: 161
*.ns.ac.yu.



Profil

icon Re: c# Windows service i pokretanje eksternog procesa15.05.2009. u 13:12 - pre 181 meseci
Kako da attachujem debuger na servis proces?

Ovaj kod sto predlazes sam probao ranije i takodje nije radio kao windows service. Medjutim radio je na console application ali se ponasao dosta cudno. Kad mu podesim datum i vreme i debagerom vidim da je za MyTime sve dobro podeseno, nakon izvrsavanja SetSystemTime, dobijem dobro podeseno sve osim broja sati. E sad da bi podesio sistemsko vreme koje zelim, morao sam da dodam:

Code:

NovoVreme.addHours(2);

...
wHour = NovoVreme.hour();
...
SetSystemTime(ref MyTime)


tj. Kad zelim da za Sistemsko vreme postavim NovoVreme, moram da NovoVreme povecam za 2 sata...
Ima li neko objasnjenje za ovo? (vremenska zona mi je podesena na +1 mada verujem da to nema veze...)

Problem sa pozivanjem eksterne aplikacije sam resio tako sto sam za servis podesio Logon na : Logon as local System account i ispod toga sam odabrao Allow service to interract with desktop, a na ovaj nacin sam uspesno promenio i sistemsko vreme :)
---------------------
****
< 9 9 > My name
..( o ).. is
. . -- . .MX86251 ?
 
Odgovor na temu

[es] :: .NET :: c# Windows service i pokretanje eksternog procesa

[ Pregleda: 1369 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.