Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
OnePlus 15 nasce per alzare l'asticella delle prestazioni e del gaming mobile. Ma non solo, visto che integra un display LTPO 1,5K a 165 Hz, OxygenOS 16 con funzioni AI integrate e un comparto foto con tre moduli da 50 MP al posteriore. La batteria da 7.300 mAh con SUPERVOOC 120 W e AIRVOOC 50 W è la ciliegina sulla torta per uno smartphone che promette di offrire un'esperienza d'uso senza alcun compromesso
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
Vediamo come si comporta il Ryzen 5 7500X3D, nuovo processore di casa AMD che fonde 6 core Zen 4 con la tecnologia 3D V-Cache, particolarmente utile in scenari come il gaming. Annunciato a un prezzo di listino di 279€, il nuovo arrivato sarà in grado di diventare un riferimento per i sistemi budget? Ecco cosa ne pensiamo.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-02-2012, 14:29   #1
TheMonzOne
Senior Member
 
Iscritto dal: Aug 2007
Messaggi: 2182
[C#] Da Windows Form a Windows Service

Ciao a tutti!
Come da titolo quello che vorrei fare è trasformare una Desktop Application o meglio una Windows Form in un Servizio di Windows, in modo che possa operare come tale e girare su un server.
L'Applicazione sotto forma di Form è già completata (o quasi), come faccio a trasformarla in un Servizio di Windows?
Attualmente uso un piccolo "trucchetto", ovvero tramite ServerAny faccio lanciare al servizio creato l'eseguibile della mia applicazione che quindi gira a tutti gli effetti come fosse un servizio.
Vorrei però fare a meno di ServerAny e creare di mio il servizio.

Una volta riuscito a fare quello, poi, dovrei trovare il modo di "monitorare" e gestire l'applicazione che, girando come servizio, non ha ovviamente GUI, quindi tutte le opzioni gestibili mediante la Form spariscono. C'è un modo semplice per farlo?
Per ora ho creato una semplicissima "Interfaccia" utente che tramite le socket non fa altro che mostrare i messaggi che arrivano sulla Form principale dentro una textarea. Qual è la struttura di controllo che mi permetterebbe di interagire con il servizio come se stessi usando la form nella sua forma Desktop?

Spero di aver espresso le mie necessità in modo chiaro, se dovesse servire posso postare anche piccole porzioni di codice per vedere come far interagire le varie strutture.

Grazie mille a tutti!
TheMonzOne è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2012, 18:47   #2
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Se hai strutturato a livelli la tua applicazione non dovresti avere particolari problemi
Dovresti staccare l'interfaccia dalla logica applicativa e accettare comandi tramite socket che sostituiscono il comando impartito da interfaccia.
I risultati poi potresti visualizzarli tramite la stessa interfaccia che hai implementato adesso.
Questo sempre tutto in teoria, se invece hai la logica strettamente legata all'interfaccia sei nei guai!
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2012, 20:13   #3
TheMonzOne
Senior Member
 
Iscritto dal: Aug 2007
Messaggi: 2182
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Se hai strutturato a livelli la tua applicazione non dovresti avere particolari problemi
Dovresti staccare l'interfaccia dalla logica applicativa e accettare comandi tramite socket che sostituiscono il comando impartito da interfaccia.
I risultati poi potresti visualizzarli tramite la stessa interfaccia che hai implementato adesso.
Questo sempre tutto in teoria, se invece hai la logica strettamente legata all'interfaccia sei nei guai!
Temo di essere nei guai allora .
Grazie per la risposta innanzi tutto...tu come suggeriresti di procedere? Non sarebbe nemmeno troppo impensabile riscrivere anche l'applicazione...non dico da zero...ma quasi...alla fine la GUI è più che altro di "visualizzazione" e interrogazione...piuttosto non riesco a capire come potrei gestire variabili e strutture dall'esterno dell'applicazione.
Esplico: l'applicazione è una sorta di gateway di ricezione per la comunicazione con alcuni dispositivi remoti che si connettono via UDP e vengono registrati/interrogati/gestiti dal gateway...come faccio, ad esempio, ad estrapolare la lista dei dispositivi connessi ( nella fattispecie una ArrayList ) per pilotarli poi dall'eventuale interfaccia esterna?
Scusate se la cosa sembra banale, ma non ho molta esperienza a questi livelli...fin'ora ho fatto sempre e solo desktop application con una GUI standard....

Ultima modifica di TheMonzOne : 14-02-2012 alle 20:18. Motivo: precisazione
TheMonzOne è offline   Rispondi citando il messaggio o parte di esso
Old 15-02-2012, 00:39   #4
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da TheMonzOne Guarda i messaggi
Temo di essere nei guai allora .
Lo supponevo

Quote:
Esplico: l'applicazione è una sorta di gateway di ricezione per la comunicazione con alcuni dispositivi remoti che si connettono via UDP e vengono registrati/interrogati/gestiti dal gateway...come faccio, ad esempio, ad estrapolare la lista dei dispositivi connessi ( nella fattispecie una ArrayList ) per pilotarli poi dall'eventuale interfaccia esterna?
Direi come fai adesso!
Supponiamo che il servizio faccia un autodiscovery dei dispositivi, avrà al suo interno una struttura dati che tiene traccia dello stato dei dispositivi es List<ConnectedDevice>.
Dovrai pensare ad un comando di GetConnectedDevices esposto dal servizio che l'interfaccia richiamerà per ottenere la lista e poi visualizzarla.
Se l'interfaccia dovesse interagire con i dispositivi potresti prevedere un comando SendCommand che il servizio interpreterà e girerà al dispositivo selezionato secondo il protocollo di comunicazione di quest'ultimo.

Se lo dovessi realizzare io userei Wcf con binding net.tcp integrandole nel servizio windows: http://msdn.microsoft.com/en-us/library/ff649818.aspx
Non hai bisogno di perdere il capo dietro socket e protocolli di comunicazione custom. E' facilmente espandibile ed estremamente potente.
Se mai dovesse essere il caso con le Wcf potresti pure esporre il tuo servizio (magari pure con protocollo soap) all'interno della rete e consentire una interrogazione remota, il tutto aggiungendo delle configurazioni e senza aggiungere una riga di codice.

La chiamata da parte della tua GUI risulterebbe estremamente banale, una semplice service reference e sei pronto ad interrogare il tuo servizio!
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 15-02-2012, 09:07   #5
TheMonzOne
Senior Member
 
Iscritto dal: Aug 2007
Messaggi: 2182
La fai facile tu , mai vista quella roba...fortuna che c'è una montagna di documentazione.
Ok, ci provo...ci risentiamo tra un paio d'anni .

Grazie per ora!
TheMonzOne è offline   Rispondi citando il messaggio o parte di esso
Old 15-02-2012, 10:58   #6
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da TheMonzOne Guarda i messaggi
La fai facile tu , mai vista quella roba...fortuna che c'è una montagna di documentazione.
Ok, ci provo...ci risentiamo tra un paio d'anni .

Grazie per ora!
Tranquillo che fai prima ad imparare ad usare Wcf che non a cercare di far funzionare una coppia di socket e ad inventare un protocollo per lo scambio dati!
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 15-02-2012, 11:24   #7
TheMonzOne
Senior Member
 
Iscritto dal: Aug 2007
Messaggi: 2182
C'è già il primo intoppo : seguendo passo passo la procedura su msdn, arrivato al punto 6, installo il servizio e tutto sembra andare a buon fine, ma quando vado ad avviarlo mi da un errore.
"Impossibile avviare il servizio Service1 su Computer Locale. Errore 5: accesso negato"

Lavoro su Windows 7 Ultimate 32bit, Account Amministratore

EDIT: risolto questo problema cambiando l'impostazione dell'account da "NetworkService" a "LocalSystem"...mi chiedo se vada bene lo stesso.
Ora cerco di capire come funzionano i metodi di passaggio....

Ultima modifica di TheMonzOne : 15-02-2012 alle 15:28.
TheMonzOne è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
SONY BRAVIA 8 II e BRAVIA Theatre System 6: il cinema a casa in formato compatto SONY BRAVIA 8 II e BRAVIA Theatre System 6: il c...
KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo KTC H27E6 a 300Hz e 1ms: come i rivali ma a met&...
Grazie ai dati di ESA il calcolo della t...
Rilasciati nuovi video e immagini della ...
Gli astronauti cinesi di Shenzhou-20 son...
Mai così tanti gas serra: il 2025...
Google condannata in Germania: favorito ...
Ubisoft rimanda i risultati finanziari e...
ADATA porta i primi moduli DDR5 CUDIMM 4...
Bob Iger anticipa le novità AI di...
Microsoft Teams 'spierà' i dipend...
Michael Burry chiude Scion e fa di nuovo...
Huawei prepara i nuovi Mate 80: fino a 2...
Una e-Mountain Bike di qualità ma...
Tutte le offerte Amazon Black Friday pi&...
DJI Mini 4K Fly More Combo con 3 batteri...
Crollo di prezzo sui nuovissimi iPhone A...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:32.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v