Šta je novo?

Windows 7 kao server, automatski login nakon RDP sesije, virtuelni monitor

ksrele

Cenjen
Učlanjen(a)
04.02.2013
Poruke
15
Poena
155
Pozdrav ljudi.

Nadam se da nisam promašio forum gde postavljam ovu temu, ali ako jesam, izvinjavam se unapred i molim moderatore da je premeste gde misle da treba da bude.

Radi se o jednom, sad već, malo starijem Lenovo serveru na kome je instaliran licencirani Windows 7. Baš mora da bude Windows 7 zbog, isto licenciranog, programa koji mora da se na njemu pokreće tako da nemojte da mi predlažete da pređem na neki drugi OS jer mi to apsolutno nije rešenje.
Taj glavni program mora stalno da bude pokrenut na serveru ali ima jednu grešku koju sada više nema ko da reši jer se softwer više ne razvija. Ja trenutno nemam alternativni program koji radi isti posao a šta tačno radi program ne mogu da napišem ali nije ni bitno.
Ovo je ukratno a za one znatiželjne detalje ću napisati na kraju ispod linije.
Naime, kada program koji radi na serveru dođe u stanje greške on otvori jedan prozorčić na kome piše da je došlo do nepredviđene greške i tada veoma bitna obrada podataka staje a da bi se nastavilo dalje korisnik mora da klikne na OK dugme na tom prozorčiću. Ali, pošto je ovo server i to bez monitora, nema ko da klikne to OK dugme.
Ja se s vremena na vreme konektujem na server preko Remote Desktop konekcije i kliknem OK ali to nije rešenje. Ja se nekad po više dana ne konektujem na server a očekujem da on radi bez zastoja.
Našao sam neku staru free verziju jednog malog ali veoma moćnog programa "PTFB" (Press the freaking button) koji je idealan za ovu namenu. On ima mogućnost da nauči o kom prozoru i o kom dugmetu je reč i da čeka u pozadini da se pojavi taj prozor sa tim dugmetom i on će ga, čim se pojavi, kliknuti.
E sad vi sigurno mislite "Pa eto, imaš rešenje, šta hoćeš od nas?"... eeee pa da je to tako ne bih ja sada ni pisao ovaj dugačak post.
Radi se o tome da kada se ja diskonektujem sa RDP-a na serveru nema više ko da gleda sadržaj ekrana, Windows user je izlogovan, nema prikačenog monitora... sve u svemu Windows više ne renderuje GUI elemente, tj. prozore i dugmiće pa ovaj mali programčić "PTFB" nema šta da klikne. Prosto, veoma bitna obrada podataka se zaustavlja i nastaje užasan problem pa ja moram, bez obzira koji je deo dana, da se kačim na server i rešim problem manuelno.

Ono što ja vidim kao potencijalno teorijsko rešenje (koje ne znam kako sprovesti u praksi) jeste, prvo spojiti neki monitor na server ili ga prevariti da ima monitor (da li softverski ili hardverski, svejedno) i naterati Windows da, kada se ja diskonektujem sa RDP sesije da se default User automatski uloguje kao da je to uradio neki korisnik fizički na serveru i da se onda slika prikazuje na taj prikačeni (virtualni) monitor pa će onda i taj mali programčić koji automatski klikće, moći da pronaće prozor sa greškom i da klikne na OK dugme na njemu.

Ne treba razmišljati na temu kako sprečiti da se greška nikako ni ne pojavi. Mislim, to bi bilo idealno, ali to nema šanse da se to sada reši. Ustvari, bilo kakva izmena tog programa sada više ne dolazi u obzir.
Eventualno u obzir može da dođe neki drugi program za automatizaciju Winows radnji pa da probam sa njim, ali čisto sumnjam da će raditi jer nema GUI renderinga.



A, kao što sam i obećao, evo detalja o glavnom programu i grešci. Ne morate ovo sve da čitate da bi mi pomogli. Ovo sam napisao jer znam da će biti radoznalih ljudi koji će pitati za detalje programa i greške.

Dakle, program inače radi bez problema. Čita podatke iz baze i nešto radi sa njima, generiše neke PDF izveštaje i slično. Sve dok, u totalno nasumičnom trenutku, ničim izazvan, ne dođe u stanje neke neobjašnjive greške: Access violation at address 5015605B in module 'rtl190.bpl'. Read of address 00000000.
I dok je razvoj programa bio aktivan, programeri nikako nisu mogli da provale zašto dolazi do te greške jer se kod njih nije dešavala, ali kada do nje dođe, obrada podataka, koja inače nikako ne sme da se zaustavi, u trenutku kada dođe do greške, nažalost, staje i stoji sve dok neko ne klikne na OK dugme na tom prozorčiću i nakon toga zatvoriti program i pokrenuti ga ponovo da bi sve u potpunisti radilo.
Poslednje što su programeri isprogramirali pre nego što su odustali od celog projekta jeste da se program sam resetuje (ugasi aktivna instanca i pokrene nova) na svakih 30 minuta tako da ako slučajno dođe do greške program bi trebalo sam da se ugasiti i startovaće se druga instanca i obrada podataka se nastavlja dalje.
Ovo rešenje lepo funkcioniše ako u tom jednom ciklusu ne dođe do greške. Nakon 30 minuta program se sam zatvara i nakon par sekundi otvara se novi i sam nastavlja sa obradom podataka.
Ali programeri nisu uzeli u obzir činjenicu da kada program dođe do greške pa otvori prozor sa opisom greške i kada istekne tih 30 minuta ta njihova skripta za gašenje programa ne može da zatvori ovaj prozor sa greškom. Ustvari, vizuelno glavni program se zatvori, tj. glavna forma programa nestane sa ekrana, ali njen prozor sa opisom greške ostaje otvoren a to znači da je instanca programa i dalje aktivna u pozadini i troši mi resurse servera, ali ono što je još gore, drži zauzetu jednu licencu kojih imam ograničen broj. Često se desi da za jedan dan bude toliko instanci pokrenutih u pozadini da nema više slobodnih licenci da se pokrene nova instanca programa pa obrada podataka staje...
Ono što moram da naglasim da se program ne sme naglo ugasiti. Ta funkcionalnost automatskog resetovanja programa koju su programeri poslednju isprogramirali radi tako što kada istekne 30 minuta prvo se proveri šta program trenutno radi, ako je u fazi obrade jednog bloka podataka onda se čeka da se ta obrada završi pa pre nego što se počne sa novim blokom podataka tek tada se program sam ugasi. To može da potraje i do 5 minuta ali program će da čeka dok se to ne desi pa će se tek onda sam zatvoriti i pokrenuti novu instancu. Ili će prvo pokrenuti novu instancu pa će ugasiti staru, ali nije ni bitno.

Znači, evo primera: program radi bez problema nekih, recimo 10 minuta, i onda se desi ova neka greška (verovatno neka greška na memorijskoj lokaciji ili tako nešto) i program otvori popup prozorčić na kome piše "Access violation at address 5015605B in module 'rtl190.bpl'. Read of address 00000000" i na tom prozorčiću postoji samo jedno dugme OK. U pozadini se vidi glavna forma programa koja stoji zaleđena, znači ništa ne funkcioniše na njoj. U jednom trenutku nakon 30 minuta program dobije instrukciju da se ugasi. Glavna forma programa nestaje sa ekrana ali ostaje onaj mali prozor za opisom greške i dalje otvoren. Za par sekundi startuje se novi program i sve naizgled radi bez problema. U stvarnosti, meni su u tom trenutku iskorišćene dve lincence programa a imam ih ukupno, recimo, 5. Kapirate da će može relativno brzo da dođe do toga da se svih 5 lincenci iskoristi.
 
Možda da pristupaš kompu Anydesk-om, ako ti previše ne narušava sigurnost.
 
Pozdrav ljudi.

Nadam se da nisam promašio forum gde postavljam ovu temu, ali ako jesam, izvinjavam se unapred i molim moderatore da je premeste gde misle da treba da bude.

Radi se o jednom, sad već, malo starijem Lenovo serveru na kome je instaliran licencirani Windows 7. Baš mora da bude Windows 7 zbog, isto licenciranog, programa koji mora da se na njemu pokreće tako da nemojte da mi predlažete da pređem na neki drugi OS jer mi to apsolutno nije rešenje.
Taj glavni program mora stalno da bude pokrenut na serveru ali ima jednu grešku koju sada više nema ko da reši jer se softwer više ne razvija. Ja trenutno nemam alternativni program koji radi isti posao a šta tačno radi program ne mogu da napišem ali nije ni bitno.
Ovo je ukratno a za one znatiželjne detalje ću napisati na kraju ispod linije.
Naime, kada program koji radi na serveru dođe u stanje greške on otvori jedan prozorčić na kome piše da je došlo do nepredviđene greške i tada veoma bitna obrada podataka staje a da bi se nastavilo dalje korisnik mora da klikne na OK dugme na tom prozorčiću. Ali, pošto je ovo server i to bez monitora, nema ko da klikne to OK dugme.
Ja se s vremena na vreme konektujem na server preko Remote Desktop konekcije i kliknem OK ali to nije rešenje. Ja se nekad po više dana ne konektujem na server a očekujem da on radi bez zastoja.
Našao sam neku staru free verziju jednog malog ali veoma moćnog programa "PTFB" (Press the freaking button) koji je idealan za ovu namenu. On ima mogućnost da nauči o kom prozoru i o kom dugmetu je reč i da čeka u pozadini da se pojavi taj prozor sa tim dugmetom i on će ga, čim se pojavi, kliknuti.
E sad vi sigurno mislite "Pa eto, imaš rešenje, šta hoćeš od nas?"... eeee pa da je to tako ne bih ja sada ni pisao ovaj dugačak post.
Radi se o tome da kada se ja diskonektujem sa RDP-a na serveru nema više ko da gleda sadržaj ekrana, Windows user je izlogovan, nema prikačenog monitora... sve u svemu Windows više ne renderuje GUI elemente, tj. prozore i dugmiće pa ovaj mali programčić "PTFB" nema šta da klikne. Prosto, veoma bitna obrada podataka se zaustavlja i nastaje užasan problem pa ja moram, bez obzira koji je deo dana, da se kačim na server i rešim problem manuelno.

Ono što ja vidim kao potencijalno teorijsko rešenje (koje ne znam kako sprovesti u praksi) jeste, prvo spojiti neki monitor na server ili ga prevariti da ima monitor (da li softverski ili hardverski, svejedno) i naterati Windows da, kada se ja diskonektujem sa RDP sesije da se default User automatski uloguje kao da je to uradio neki korisnik fizički na serveru i da se onda slika prikazuje na taj prikačeni (virtualni) monitor pa će onda i taj mali programčić koji automatski klikće, moći da pronaće prozor sa greškom i da klikne na OK dugme na njemu.

Ne treba razmišljati na temu kako sprečiti da se greška nikako ni ne pojavi. Mislim, to bi bilo idealno, ali to nema šanse da se to sada reši. Ustvari, bilo kakva izmena tog programa sada više ne dolazi u obzir.
Eventualno u obzir može da dođe neki drugi program za automatizaciju Winows radnji pa da probam sa njim, ali čisto sumnjam da će raditi jer nema GUI renderinga.



A, kao što sam i obećao, evo detalja o glavnom programu i grešci. Ne morate ovo sve da čitate da bi mi pomogli. Ovo sam napisao jer znam da će biti radoznalih ljudi koji će pitati za detalje programa i greške.

Dakle, program inače radi bez problema. Čita podatke iz baze i nešto radi sa njima, generiše neke PDF izveštaje i slično. Sve dok, u totalno nasumičnom trenutku, ničim izazvan, ne dođe u stanje neke neobjašnjive greške: Access violation at address 5015605B in module 'rtl190.bpl'. Read of address 00000000.
I dok je razvoj programa bio aktivan, programeri nikako nisu mogli da provale zašto dolazi do te greške jer se kod njih nije dešavala, ali kada do nje dođe, obrada podataka, koja inače nikako ne sme da se zaustavi, u trenutku kada dođe do greške, nažalost, staje i stoji sve dok neko ne klikne na OK dugme na tom prozorčiću i nakon toga zatvoriti program i pokrenuti ga ponovo da bi sve u potpunisti radilo.
Poslednje što su programeri isprogramirali pre nego što su odustali od celog projekta jeste da se program sam resetuje (ugasi aktivna instanca i pokrene nova) na svakih 30 minuta tako da ako slučajno dođe do greške program bi trebalo sam da se ugasiti i startovaće se druga instanca i obrada podataka se nastavlja dalje.
Ovo rešenje lepo funkcioniše ako u tom jednom ciklusu ne dođe do greške. Nakon 30 minuta program se sam zatvara i nakon par sekundi otvara se novi i sam nastavlja sa obradom podataka.
Ali programeri nisu uzeli u obzir činjenicu da kada program dođe do greške pa otvori prozor sa opisom greške i kada istekne tih 30 minuta ta njihova skripta za gašenje programa ne može da zatvori ovaj prozor sa greškom. Ustvari, vizuelno glavni program se zatvori, tj. glavna forma programa nestane sa ekrana, ali njen prozor sa opisom greške ostaje otvoren a to znači da je instanca programa i dalje aktivna u pozadini i troši mi resurse servera, ali ono što je još gore, drži zauzetu jednu licencu kojih imam ograničen broj. Često se desi da za jedan dan bude toliko instanci pokrenutih u pozadini da nema više slobodnih licenci da se pokrene nova instanca programa pa obrada podataka staje...
Ono što moram da naglasim da se program ne sme naglo ugasiti. Ta funkcionalnost automatskog resetovanja programa koju su programeri poslednju isprogramirali radi tako što kada istekne 30 minuta prvo se proveri šta program trenutno radi, ako je u fazi obrade jednog bloka podataka onda se čeka da se ta obrada završi pa pre nego što se počne sa novim blokom podataka tek tada se program sam ugasi. To može da potraje i do 5 minuta ali program će da čeka dok se to ne desi pa će se tek onda sam zatvoriti i pokrenuti novu instancu. Ili će prvo pokrenuti novu instancu pa će ugasiti staru, ali nije ni bitno.

Znači, evo primera: program radi bez problema nekih, recimo 10 minuta, i onda se desi ova neka greška (verovatno neka greška na memorijskoj lokaciji ili tako nešto) i program otvori popup prozorčić na kome piše "Access violation at address 5015605B in module 'rtl190.bpl'. Read of address 00000000" i na tom prozorčiću postoji samo jedno dugme OK. U pozadini se vidi glavna forma programa koja stoji zaleđena, znači ništa ne funkcioniše na njoj. U jednom trenutku nakon 30 minuta program dobije instrukciju da se ugasi. Glavna forma programa nestaje sa ekrana ali ostaje onaj mali prozor za opisom greške i dalje otvoren. Za par sekundi startuje se novi program i sve naizgled radi bez problema. U stvarnosti, meni su u tom trenutku iskorišćene dve lincence programa a imam ih ukupno, recimo, 5. Kapirate da će može relativno brzo da dođe do toga da se svih 5 lincenci iskoristi.
To je delphi, грешка се састоји у томе да програмери нису нашли null pointer access gresku, koja se desava jelte jer negde ocekujes validan pointer, a naletis
na null.
no windows kanda moze da dizejbluje tu gresku za neki program...
  1. Input “Control Panel” (without the quotes) in your Windows Search bar and launch the app.
  2. Scroll down and click on System.
  3. In the left pane, click on Advanced System Settings.
  4. In the Advanced tab, click on Settings under the Performance section.
  5. In the Performance Options window, click on the Data Executive Prevention tab.
  6. Tick the “Turn on DEP for all programs and services except those I select” option, then click on the Add button and find your program’s .exe file.
  7. Add it to the list, click on Apply, and then on Okay to save the changes.
Try running the problematic program again to see if you still get the Access Violation at Address error.
 
Moram:. Ako je tako bitan program, sto ne napravite/narucite novi?
 
 
To je delphi, грешка се састоји у томе да програмери нису нашли null pointer access gresku, koja se desava jelte jer negde ocekujes validan pointer, a naletis
na null.
no windows kanda moze da dizejbluje tu gresku za neki program...
  1. Input “Control Panel” (without the quotes) in your Windows Search bar and launch the app.
  2. Scroll down and click on System.
  3. In the left pane, click on Advanced System Settings.
  4. In the Advanced tab, click on Settings under the Performance section.
  5. In the Performance Options window, click on the Data Executive Prevention tab.
  6. Tick the “Turn on DEP for all programs and services except those I select” option, then click on the Add button and find your program’s .exe file.
  7. Add it to the list, click on Apply, and then on Okay to save the changes.
Try running the problematic program again to see if you still get the Access Violation at Address error.
Hahaha... jel ovo odgovor od ChatGPT-a? Salim se, probacu ovo da aktiviram veceras pa ću da vidim šta će da bude sutra.
I da, upravu si, u pitanju je Delphi program.
Samo, jedno pitanje, da li to znači da ću poništiti prikazivanje svih grešaka ili samo konkretno ove za Null pointer? Nekad se desi da podaci nešto nisu OK i tada program isto prikaže program o grešci ali te greške su mi veoma bitne i njih ne treba sklanjati sa ekrana dok ih ja ne pročitam.

Moram:. Ako je tako bitan program, sto ne napravite/narucite novi?

A pazite sad ironije: upravo sam danas saznao da nećemo još dugo koristiti taj softver jer moj direktor hoće da kupimo bolji. Što je u jednu ruku sjajno, ali mogao me je o tome ranije obavetiti a ne da se ja već skoro mesec dana patim oko ovoga i pišem ovde kilometarski post na forumu.... ali dobro, sta sad.
Jedino što me ne raduje prelazak na novi softver jer je pitanje da li će moći da obavlja sve funkcije koje ovaj obavlja, ili ako ih ne obavlja da li će programeri moći da ih na naš zahtev sve isprogramiraju i da li će moje rukovodstvo pristati na te troškove jer oni, pretpostavljam, smatraju da kada jednom plate novi program da je to to, ali ja dobro znam da je to tek početak plaćanja... 🤣

Možda da pristupaš kompu Anydesk-om, ako ti previše ne narušava sigurnost.

Pa o tome sam i razmišljao. Tačnije konkretno o VNC-u ali ima tu još jedna ekipa koja se kači na server. Oni prate i održavaju jedan drugi program na tom serveru, doduše manje bitan ali šta sad. Oni se, bez da mi to ranije najave, nekad nakače preko RDP-a na server i kada se diskonetuju ja ne mogu više da se konektujem preko VNC-a, tačnije mogu da se konektujem ali dobijem crnu sliku.
Tu drugu ekipu ne mogu da ubedim da koriste VNC jer oni "moraju" iz nekog razloga da koriste RDP...


Mislim da na tom serveru nemam HDMI izlaz. Imamo samo VGA i DP ali na sam več spojio KVM switch ali kada je on ili monitor, koji je nakačen na njega, ugašen onda server ne detektuje da je išta spojeno. Monitor moram gasiti jer su server i monitor postavljeni u rack sa providnim vratima pored koga dosta ljudi prolazi. Jeste rack zaključan ali ne želim da ljudi gledaju šta je na monitoru.

U svakom slučaju, razmišljao sam i da zalemim par otpornika na VGA konektor i uključim ga u server da ga prevarim kao da je spojen monitor i to je OK, ali šta mi je sledeći korak?
Šta se dešava kada se ta druga ekipa nakači na server preko RDP protokola, tj. kada se oni diskonektuju ja moram fizički otići do servera da se ulogujem da bi bilo slike na monitoru...
 
Poslednja izmena:
Potraži na Google-u "close rdp session without locking". RDP moraš da zatvaras startovanjem te komande ali će sesija na serveru ostati nezakljicana.

Imao sam sličan zahtev i radilo je (pre 6-7 godina).
 
Imao sam i ja ovako jedan "nesrećan slučaj" pre koju godinu. Rešio sam sa Pajtonom i malo skriptovanja. Dakle, ovako bih ja to rešio:
Ako je aplikacija 32-bitna onda ti treba ova instalacija, uostalom treba ti ova.
Prilikom instalacije štikliraj 'Add python.exe to PATH'. Kad se instaliranje završi, uđeš u cmd i uradiš
Kod:
pip install pywinauto

Sačuvaš skriptu ispod u nekom fajlu npr. skripta.py
Python:
import time
import pywinauto
from pywinauto.timings import Timings

PUTANJA = 'C:/Users/ccc/Desktop/Project1.exe'
SADRZAJ = ['Access violation at address', 'rtl190.bpl']
PROVERA_SVAKIH = 10  # sekundi


if __name__ == '__main__':
    Timings.fast()

    app = pywinauto.Application()
    while True:
        if not app.is_process_running():
            try:
                app = app.connect(path=PUTANJA)
            except pywinauto.application.ProcessNotFoundError:
                # ako ne radi ni jedna instanca, pokreni sam
                app = app.start(PUTANJA)

        # pretraga po prozorima u ovom procesu
        for win in app.windows():
            e = False
            # nađi tekst
            for c in win.descendants():
                m = 0
                for s in SADRZAJ:
                    if s in c.window_text():
                        m += 1
                if m == len(SADRZAJ):
                    e = True
                    break
            # ako smo našli prozor sa tekstom, klikni na ok dugme
            if e:
                for d in win.descendants():
                    if d.window_text().strip().lower() == "ok":
                        d.click()
                        break

                # ako smo popravili grešku, pokreni novu instancu odmah
                # (uostalom čekaj sledeće pokretanje)
                #app = app.start(PUTANJA)
                break

        # pauziraj proveru (da procesor ne vrti u prazno)
        time.sleep(PROVERA_SVAKIH)
Posle samo pokreneš preko cmd-a:
Kod:
python skripta.py
ili staviš u Windows Task Scheduler
 
Vrh Dno