martedì 31 luglio 2018

Rilasciata al versione di Announcing TypeScript 3.0

Come riportato dal seguente post https://blogs.msdn.microsoft.com/typescript/2018/07/30/announcing-typescript-3-0/ è ostata rilasciata la versione finale di TypeScript 3.0.
Nell'annuncio sono presenti le novità ed alcuni esempi di codice.

Immagini gratuite

Scoperto da pochi giorni, un sito dove poter scaricare gratuitamente immagini o foto liberamente utilizzabili nei propri siti o programmi.
Il seguente sito https://gratisography.com/ offre gratuitamente tantissime immagini da scaricare.
Le immagini si possono trovare o selezionando la categoria di proprio interesse oppure nella casella di ricerca.
Per maggiori informazioni ed altro visitate il sito indicato.

lunedì 30 luglio 2018

Sito forum su Excel

Per coloro che sono interessati al programma di calcolo Microsoft Excel, qui http://www.forumexcel.it/forum/ trovano un ottimo forum, dove poter fare domande o rispondere a quelle presenti, sul programma di calcolo più usato al mondo.
Nel sito troviamo vari sezioni, e non solo su Excel, ma anche di altri programmi.
Un buon portale dove trovare risposte alle domande o rispondere a quelle presenti.

domenica 29 luglio 2018

client mail smtp e pop3 di email.it configurazione posta elettronica outlook



Per configurare la posta elettronica in pop3 in Outlook 2016 o altra versione, durante l'aggiunta account selezionare pop.
A questi vanno aggiunti i paramenti come segue:
Per la posta in arrivo, per pop3 impostare i seguenti parametri.:
in.email.it e porta 995 se richiede SSL oppure 110 senza SSL
Per la posta in uscita, per SMTP impostare i seguenti parametri.:
out.email.it e porta 587 o 25.
A questo punto confermate tutto, togliendo se volete la spunta su "Lascia una copia dei messaggi sul server" in questo modo, non viene lasciato il messaggio quando si scarica.
Ora potete utilizzare il programma di posta elettronica più famoso al mondo per la gestione della vostra posta elettronica.

FT: Verifica copertura automezzi dalla targa servizio online gratuito

Il portale dell'Automobilista

Il fuori tema di questa settimana riguarda la possibilità tramite sito, di sapere se un veicolo con targa ha la copertura assicurativa oppure no.
Il servizio è gratuito e non richiede nessuna registrazione. Qui https://www.ilportaledellautomobilista.it/web/portale-automobilista/verifica-copertura-rc il sito.

sabato 28 luglio 2018

componente gratuito di Visual Studio per la formattazione del codice CodeMaid

codemaid.net

Da molto tempo non scrivevo una notizia di componenti gratuiti, e lo faccio per segnalare un componente per Visual Studio di grande interesse.
Il componente gratuito Code Maid, qui http://www.codemaid.net/ il sito ufficiale, integra a Visual Studio, funzionalità di formattazione nel codice, rendendo più agevole lo sviluppo di codice.
Il componente si può scaricare dal sito Microsoft qui https://marketplace.visualstudio.com/items?itemName=SteveCadwallader.CodeMaid

ebook gratuito Excel sul linguaggio VBA Excel VBA Notes for Professionals

Excel VBA Notes for Professionals

Altro interessante ebook, composto da circa 127 pagine in lingua inglese con diversi esempi di codice VBA per Excel, è quello proposto in questo sito https://sf.tradepub.com/free/w_goaa12/ che previa registrazione gratuita è possibile scaricare.
Un ebook per programmare in Excel tramite il linguaggio VBA.

venerdì 27 luglio 2018

Sito ufficiale di Small Basic



Come riportato dal seguente sito https://blogs.msdn.microsoft.com/smallbasic/2018/07/26/announcement-welcome-to-small-basic-website-2-0/ è stato rilasciato e pubblicato il nuovo portale ufficiale della programmazione Small Basic. Un ambiente di sviluppo per lo sviluppo di applicazioni in vari ambienti, molto facile ed intuitivo sia per bambini che per adulti.
Il sito in lingua inglese, offre interessanti notizie, esempi di codice e tutorial.
Il sito ufficiale della programmazione Small Basic è visibile qui http://www.SmallBasic.com

Jquery rilevare il valore della select in Asp.Net MVC

Il frammento di codice qui di seguito, illustra una tecnica di come rilevare il valore di una select (option) da JQuery



 $('#NomeSelect').on('change', function () {
            alert(this.value);

        });

giovedì 26 luglio 2018

Outlook togliere intestazione del periodo delle email

Quando si utilizza Microsoft Outlook (2016 o altra versione) può capitare che nella nostra casella di posta elettronica, le email sono raggruppate per la data di ricezione, con l'intestazione, come mostrato in figura 1.




Se vogliamo togliere questo tipo di visualizzazione, dobbiamo andare nel menu "Visualizza" e da quella finestra, selezionare la voce "Gestione visualizzazione" figura 2

Figura 2



Verrà aperta una nuova finestra (figura 3) dove selezionando la prima riga, dobbiamo fare click sul pulsante "modifica" permettendo di accedere ad alcune informazioni.

Figura 3


Nela finestra che viene aperta (figura 4 lato sinistro) fare click sul pulsante "Raggruppa" in questo modo verrà aperta un ulteriore finestra (figura 4 lato destro) dove bisogna togliere la spunta sulla voce "Raggruppa automaticamente in base alla disposizione specificata".

A questo punto confermate con il tasto ok tutte le finestre.

Figura 4



Software gratuito di recupero dati per Android EaseUS MobiSaver for Android Free



Nel caso che state cercando un software gratuito per il recupero dei dati per dispositivi Android qui https://it.easeus.com/android-data-recovery-software/free-android-data-recovery.html è possibile scaricare una versione gratuita, con alcune limitazioni di funzionalità ma non di tempo, per tale dispositivo.
Il software è in lingua italiana.
Per maggiori informazioni e download visitate il sito indicato.

mercoledì 25 luglio 2018

SharePoint Server 2019 Public Preview

SharePoint 2019 preview available now

Come riportato dal seguente sito, https://blogs.technet.microsoft.com/christianheim/2018/07/24/sharepoint-2019-public-preview-generally-available/ rilasciato da qualche giorno la versione preview al pubblico di Sharepoint 2019, il programma per la gestione delle intranet e gestione documentale.

La versione, essendo ancora in fase di aggiornamento e miglioramenti, si consiglia di installarla su pc di test e di prova e non di produzione.
Qui https://www.microsoft.com/en-us/download/details.aspx?id=57169 potete scaricare la versione in inglese di Sharepoint 2019.

free ebook TypeScript Notes for Professionals

TypeScript Notes for Professionals


Previa registrazione è possibile scaricare un ebook sul linguaggio TypeScript, con interessanti esempi di codice.
L'ebook è in formato pdf e lingua inglese.
Per il download e maggiori informazioni visitate il seguente sito https://sf.tradepub.com/free-offer/typescript-notes-for-professionals/w_goaa42

martedì 24 luglio 2018

YouTube Music nuovo portale gratuito per la musica

Da qualche giorno è online il nuovo portale per la musica.
Youtube Music, visibile qui https://music.youtube.com/ in lingua italiana è un portale nel quale possibile vedere video musicali ed ascoltare la propria canzone preferita o raccolta musicale.


free ebook MonoGame

MonoGame Succinctly


Dal seguente sito https://www.syncfusion.com/ebooks/monogame_succinctly  previa registrazione gratuita, è possibile scaricare un manuale in formato pdf o per dispositivi mobile, in lingua inglese riguardante l'utilizzo di Monogame, un framework open source per la creazione di video giochi.
Il libro, di circa 100 pagine fornisce al lettore le basi per l'utilizzo di tale Framework.
Per il download e maggiori informazioni visitate il sito indicato.

lunedì 23 luglio 2018

FT: sito sulla salute

Il fuori tema di questa settimana, riguarda un sito dedicato alla salute.
Il sito "In Salute" visibile qui https://www.insalutenews.it/ fornisce costanti notizie, approfondimenti sulla salute e sulla situazione in Italia di iniziative atte al benessere.
Diviso anche per categorie è possibile svogliare questo portale di molti contenuti.

domenica 22 luglio 2018

asp.net mvc download multiple files

Nel caso che abbiamo la necessita di effettuare il download di più file, dovremmo comprimerli e poi effettuare in ActionResult effettuare il download.

Qui di seguito il frammento di codice

Spazio dei nomi:

using System.IO;
using System.IO.Compression;


Metodo Action Per il dowload.

 [HttpGet]
        public ActionResult DownloadMultiFiles(string id)
        {

 using (var memoryStream = new MemoryStream())
             {
                 using (var ziparchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
                 {

                       var files = GetFiles();

                       foreach (var mioFile in files )
                     {
                     
                         var entry = ziparchive.CreateEntry(mioFile.Nome, CompressionLevel.Fastest);
                         using (var entryStream = entry.Open())
                         {
                             mioFile.FileByteStream.CopyTo(entryStream);
                         }
                     }
       }
                                return File(memoryStream.ToArray(), "application/zip", "Attachments.zip");
 }

 }

Qui di seguito per richiamare la funzione.

 window.location.href = '@Url.Action("DownloadMultiFiles", "Doc")

sabato 21 luglio 2018

Lumion tour per conoscere il software sul 3D

Lumion 3D Italia

Ancora due mesi di formazione gratuita, per conoscere le potenzialità offerte dal miglior software sul 3D Lumion.
In varie città italiane si potrà partecipare all'evento Lumion Tour http://www.lumion3d.it/lumion-events/#date iniziativa di formazione gratuita, aperta a tutti, per conoscere il programma Lumion
Per partecipare e maggiori informazioni visitate il sito indicato.

Sql estrapolare in una join i record non presenti nella relazione

Il frammento di codice SQL qui di seguito, fornisce una tecnica di come estrapolare in due tabelle collegate i record che non sono presenti nella seconda tabella di relazione.


Select  tabella1.ColonnaA
from  Tabella1 t1
left join tabella2 t2 ON t2.colonnaA = t1.ColonnaA
where t2.ColonnaA IS NULL

venerdì 20 luglio 2018

Sito su .Net aspdotnet-pools

Oggi segnalo un sito che fornisce interessanti articoli sulla programmazione .Net.
Dal seguente sito http://www.aspdotnet-pools.com/ potete consultare in lingua inglese, articoli, ma anche esempi di codice, sulla programmazione .Net in prevalenza web.

Using C# to check if string contains a string in string array

Il frammento di codice qui di seguito riguarda la possibilità di trovare in una string il valore di un array.
Utilizzando il metodo Contains di una stringa, utilizzando di solito con testo, mentre l'esempio riguarda con l'utilizzo di array.

string  VariabileStringConValori = "a;b;c;d";
var MioArray = VariabileStringConValori.Split(';');
 var risultato =  OggettoConValori.Where(p=>MioArray .Any(p.ProprietaOggetto.ToLower().Contains));










giovedì 19 luglio 2018

servizio gratuito Microsoft Teams



Oggi segnalo un nuovo strumento gratuito offerto da Microsoft, in ambito di collaborazione.
Dal seguente sito https://products.office.com/it-it/microsoft-teams/free potete utilizzare la versione gratuita di Microsoft Teams, che permette la gestione di collaborazione tra più persone, per il raggiungimento degli obiettivi.
La versione gratuita, a differenza di quelle a pagamento, ha qualche limitazione ma è un buon software di collaborazione.
Per maggiori informazioni ed utilizzo visitate il sito indicato.

Jquery rimuovere elemento da array - jquery remove element array

Il frammento di codice qui di seguito, illustra una tecnica di come rimuovere un certo elemento da un array.
Tramite grep possiamo estrapolare un determinato elemento.

L'array che viene valorizzato tramite i valori dei checkbox selezionati, se è presente un certo valore (on) verrà rimosso.




var valoriSelezionati = new Array();
                $('table [type="checkbox"]').each(function (i, chk) {
                    if (chk.checked) {
                        valoriSelezionati.push(chk.value);
                    }
                });
                var removeElemento = "on";
                valoriSelezionati = jQuery.grep(valoriSelezionati, function (value) {
                    return value != removeElemento;
                });
                alert(valoriSelezionati.join(", "));

mercoledì 18 luglio 2018

Nuova versione di skype

Aggiornamento Skype

Rilasciato da pochi giorni la nuova versione di Skype, versione 8, con il quale si possono effettuare video chiamate, chiamate o inviare messaggi.
Il programma di comunicazione più usato al mondo, passa alla versione 8, con interessanti funzionalità.
Per il download e maggiori informazioni visitate il seguente sito https://www.skype.com/it/upgrade-skype/

Download ebook Visual Basic .NET Notes for Professionals

Visual Basic .NET Notes for Professionals

Con le sue circa 200 pagine, l'ebook Visual Basic .Net Notes for Professionals scaricabile qui https://sf.tradepub.com/free-offer/visual-basic-.net-notes-for-professionals/w_goaa44 in lingua inglese fornisce interessanti spunti di programmazione sul linguaggio di programmazione Visual Basic Net.
Per scaricare il manuale bisogna registrarsi gratuitamente al sito indicato.

martedì 17 luglio 2018

Software gratuito per creare una unità USB avviabile

[rufus screenshot]


Se state cercando un programma gratuito per la creazione di sistemi operativi che si avviano da chiavetta usb, il programma Rufus è un ottimo software che fornisce tale opportunità.
Qui https://rufus.akeo.ie/ la versione in lingua italiana che permette ad ogni persona di creare una chiavetta avviabile in maniera molto semplice.
Per il download e maggiori informazioni visitate il sito indicato.

lunedì 16 luglio 2018

Editor online per modificare le immagini

LunaPic Photo Editor

Oggi vi segnalo un ottimo programma per la modifica delle immagini, tramite sito online.
Gli strumenti online sempre più si stanno diffondendo e servizi gratuiti sono in continua evoluzione.
Il seguente sito https://www298.lunapic.com/editor/ permette di modificare ed aggiungere effetti sulle nostre immagini.
Dopo aver caricato la nostra immagine, è possibile modificarla o aggiungere testo o effetti.
Per maggiori informazioni visitate il sito indicato.

domenica 15 luglio 2018

Jquery selezionare tramite click tutte le checkbox presenti nella tabella - Jquery Selecting Table Rows with Checkbox

Il frammento codice qui di seguito illustra una tecnica in Jquery, di come tramite il click su un checkbox seleziona in automatico tutti i vari check presenti nelle singole righe.

Qui di seguito la tabella:

 table id="TabellaDati">
        <thead>

            <tr>
                <th>
                    <input type="checkbox" id="selectAll" />
                </th>
                <th>Id</th>
                <th>titolo</th>

            </tr>
        </thead>
         tbody>
            @foreach (var item in Model)
            {
                 tr data-id="@item.Id" name="@item.IdChiave">
                    <td class="cb"><input type="checkbox" value=@item.IdChiave></td>
                 
                     td>@item.Testo</td

                </tr>
            }
        </tbody>
    </table>


Mentre qui di seguito lo script Jquery per selezionare tutti i check quando si fa click sul check in alto (selectAll).

 $(document).ready(function () {
            $('#selectAll').click(function (e) {
                var table = $(e.target).closest('table');

                $('td input:checkbox', table).prop('checked', this.checked);
            });

        });







sabato 14 luglio 2018

Download ebook VBA Notes for Professionals

VBA Notes for Professionals

Un ebook gratuito di circa 200 pagine in formato Pdf, riguardante il linguaggio di programmazione Visual Basic Application (VBA) per il pacchetto Office.
L'ebook si può scaricare da qui https://sf.tradepub.com/free/w_goaa43/ previa registrazione gratuita.

venerdì 13 luglio 2018

Rilasciata la versione TypeScript 3.0 RC

Come riportato dal seguente post qui https://blogs.msdn.microsoft.com/typescript/2018/07/12/announcing-typescript-3-0-rc/ rilasciata la nuova versione RC di TypeScript.
Nel post sono presenti le novità con esempi di codice per fornire delucidazioni sulla nuova versione.

Sito online per la modifica ed altre operazioni sui file PDF

Oggi vi segnalo un sito molto interessante e di numerose funzionalità che permettono di lavorare sui file PDF.
Il sito PdfCandy visibile qui  https://pdfcandy.com/it/ in lingua italiana, offre una serie di funzionalità per la modifica ed altro sui file.
Dopo aver modificato il file, c'è possibilità di scaricarlo sul proprio pc, senza lasciare email o registrazione.
Per maggiori informazioni ed altro visitate il sito indicato.

giovedì 12 luglio 2018

Portale sul software

Se state cercando un sito nel quale trovare informazioni utili su software e siti di grande interesse, il portale aiutamici visibile qui http://www.aiutamici.com/ costantemente aggiornato, fornisce interessanti notizie e segnalazioni di software e siti.
Il portale è in lingua italiana.

mercoledì 11 luglio 2018

asp.net mvc ajax 404 - File or directory not found call method

Nel caso che si sta facendo una chiamata ad un metodo del controller, da una "View" in Asp.Net MVC utilizzando ajax, può capitare che venga visualizzato un errore di tipo "404 - File or directory not found call method".

Per evitare questo tipo di messaggio, utilizzare la parola chiave "Url.Action".

Qui di seguito, il codice che replica l'errore:

 $.ajax({
                   url: "/Home/MioMetodo",
                  type: "GET",
                   dataType: "json",
                   data: { "parametro1": "valore1", "parametro2": $(this.element).val() },
                    success: function (data) {
                            response(data);
                   },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                      alert("XMLHttpRequest=" + XMLHttpRequest.responseText + "\ntextStatus=" + textStatus + "\nerrorThrown=" + errorThrown);
                 }
                 
               });


Mentre qui di seguito, il frammento di codice relativo alla soluzione:

 $.get("@Url.Action("MioMetodo", "Home")?parametro1=" + "valore1"+ "&parametro2=" + $(this.element).val(), function (data) {
                    response(data);
                });



Mentre qui di seguito il frammento di codice relativo al controller.


 [HttpGet]
        public ActionResult MioMetodo(string parametro1, string parametro2)
        {
              //codice
       
                 return Json("valore", JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
                return null;
            }

        }

kaspersky free tools




Il famoso antivirus Kaspersky, offre dal seguente sito https://www.kaspersky.it/downloads#tools la possibilità di scaricare gratuitamente tools per la difesa del proprio pc.
Gli strumenti a differenza di quelli a pagamento hanno funzionalità limitate ma sono di grande supporto al proprio pc.
Il sito è in lingua italiana, per maggiori informazioni e download visitate il sito indicato.




martedì 10 luglio 2018

Rilasciata la versione ML.NET 0.3



Come riportato dal seguente post https://blogs.msdn.microsoft.com/dotnet/2018/07/09/announcing-ml-net-0-3/ è stata rilasciata una nuova versione del programma di apprendimento automatico open source di Microsoft, ML.Net 03.
Come riportato nel post, con la nuova versione sono state aggiunte interessanti migliorie.
Per maggiori informazioni visitate il sito indicato.

software gratuito per il recupero dati di sistemi IOS



Una soluzione molto valida è gratuita quella del seguente software https://it.easeus.com/mobile-tool/free-iphone-data-recovery.html che permette il recupero dei dati su sistemi IOS.
La versione gratuita non ha limiti di tempo ma di funzionalità.
Il software è anche in lingua italiano.
Per il download e maggiori informazioni visitate il sito indicato.

lunedì 9 luglio 2018

asp.net mvc ActionResult alert visualizzare un messaggio a video

Il frammento di codice qui di seguito, illustra una tecnica di come visualizzare un messaggio (alert) in Asp.Net MVC nella parte Viewer visualizzando il risultato relativo al controller.


Qui di seguito il codice lato View.

$.ajax({
                    url: "/Home/Metodo",
                    type: "GET",
                    dataType: "json",
                    data: { "parametro": "valore"},
                    success: function (data) {
                     
                            alert(data.Message);
                       
                    },
                    error: function (data) {
                        alert('Errore ' + data);

                    }
                 
                });


Qui di seguito codice nel controller


 public ActionResult Metodo(string parametro)
        {
                             ....codice
                            .....codice
               return Json(new { Message = "valore" }, JsonRequestBehavior.AllowGet);


}

Free ebook Ruby on Rails Notes for Professionals

Ruby on Rails Notes for Professionals

Numerosi esempi di codice e diverse interessanti consigli quelli presenti nell'ebook Ruby on Ralls for professionals, scaricabile gratuitamente qui https://sf.tradepub.com/free-offer/ruby-on-rails-notes-for-professionals/w_goaa38 previa registrazione gratuita, che fornisce al lettore.
Il libro, di circa 230 pagine in formato pdf e lingua inglese fornisce interessanti esempi di codice, utili per chi si avvicina a questo mondo  o già lo conosce.

domenica 8 luglio 2018

Jquery rilevare il valore dei checkbox selezionati - Jquery to get table row values of selected checkboxes

Il frammento di codice qui di seguito, illustra una tecnica di come rilevare il valore dei checkbox presenti in un table html che sono selezionati.

var valoriSelezionati = new Array();
                $('table [type="checkbox"]').each(function (i, chk) {
                    if (chk.checked) {
                        valoriSelezionati.push(chk.value);
                    }
                });
alert(valoriSelezionati.Join(", "));

sabato 7 luglio 2018

Sito online per proteggere i file pdf

Oggi vi segnalo uno strumento di qualità e gratuito sulla protezione dei file Pdf.
Il sito https://lockpdf.com/ fornisce all'utente la possibilità di impostare nei file Pdf, una password.
Il programma è gratuito e non richiede ne registrazione e ne l'inserimento del proprio indirizzo email, un ottimo strumento.

venerdì 6 luglio 2018

Free ebook HoloLens

Hololens Succinctly

Interessante il libro gratuito in formato digitale rilasciato qualche settimana, nel quale illustra l'utilizzo di hololens, gli ologrammi di Microsoft.
Un ebook in formato pdf o per dispositivi mobile, in lingua inglese, che fornisce le basi di questa nuova tecnologia.
Per il download o maggiori informazioni visitate il seguente sito https://www.syncfusion.com/ebooks/hololens_succinctly

giovedì 5 luglio 2018

entity framework problem cast string to int ExecuteStoreQuery The specified cast from a materialized 'System.Double' type to the 'System.String' type is not valid.

Nel caso che stiamo utilizzando il metodo ExecuteStoreQuery in Entity Framework per estrapolare da una query dei record, può capitare che da una select il dato di tipo intero convertito in testo generi l'eccezione
"The specified cast from a materialized 'System.Double' type to the 'System.String' type is not valid."

Qui di seguito l'istruzione che potrebbe causare l'errore, se il campo è numerico.

var res = objectContext.ExecuteStoreQuery<string>("select distinct ColonnaInteger from " + tabella + " where ColonnaInteger  like '%" + filter.Replace("'", "''") + "%'");

Per evitare questa eccezione, dobbiamo utilizzare l'istruzione convert che converte il tipo intero in testo, in modo che poi nel metodo "ExecuteStoreQuery" non viene generato nessun errore.

Qui di seguito il frammento di codice per evitare l'eccezione.

var res = objectContext.ExecuteStoreQuery<string>("select distinct CONVERT(varchar(10), ColonnaInteger) from " + tabella + " where ColonnaInteger like '%" + filter.Replace("'", "''") + "%'");



Download gratuito dell'antivirus Kaspersky

Kaspersky Free


Dal seguente sito https://www.kaspersky.it/downloads/thank-you/free-antivirus-download potete scaricare la versione in italiano del famoso antivirus Kaspersky.
Il software scaricabile gratuitamente, permette di proteggere il pc, naturalmente questa versione a meno funzionalità della versione a pagamento.
Per il download e maggiori informazioni visitate il sito indicato.


mercoledì 4 luglio 2018

FT: Sito meteo

Il fuori tema di questa settimana riguarda la possibilità di consultare le previsione in Italia.
Il seguente sito https://www.ilmeteo.net/ offre previsioni attendibili e di buona precisione.
Un sito interessante.

martedì 3 luglio 2018

Ottimo programma di grafica gratuito SKETCHBOOK

SketchBook on Microsoft Surface Studio

Da qualche settimana è possibile scaricare gratuitamente il programma Sketchbook, con il quale si possono fare in maniera semplice e con funzionalità avanzate ottimi disegni.
Il programma, anche in lingua italiana e disponibile per diverse piattaforme, per maggiori informazioni e download visitate il seguente sito https://sketchbook.com/


lunedì 2 luglio 2018

Net 4.6 Creazione di un servizio per Windows con C# e VB.Net

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_net-46-creazione-di-un-servizio-per-wind_1578.aspx


In questo articolo vedremo come realizzare un servizio per Windows, tramite il linguaggio VB.Net e C#, con Visual Studio 2015 e Framework 4.6. Questa tecnica di creazione dei linguaggi si può utilizzare dalla versione 2010 in poi, e con qualsiasi versione del Framework.
Si apre Visual Studio, e tramite il linguaggio di proprio interesse, selezioniamo i modelli quelli della categoria “Desktop di Windows” a questo punto selezionare il modello di tipo “Servizio Windows” (figura 1), ed assegnare il nome del progetto e confermare il tutto tramite il pulsante ok.



Figura 1 – La selezione del modello del progetto


Si aprirà una schermata tutta di colore griglio, facciamo doppio click sul file “app.config” e dopo il tag “Configuration” inseriamo il tag “appsettings “ dove andremo a scrivere un parametro che utilizzeremo nel servizio per impostare l’intervallo, l’esempio di codice è qui di seguito.


<appSettings>

    <!--in millesecondi / 1 secondo = 1000-->

    <add key="INTERVALLOATTIVITA" value="2000" />

  </appSettings>


Mentre qui di seguito si riporta il codice completo del file di configurazione “App.Config”.




<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <appSettings>

    <!--in millesecondi / 1 secondo = 1000-->

    <add key="INTERVALLOATTIVITA" value="2000" />

  </appSettings>

    <startup>

        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />

    </startup>

</configuration>

Passiamo in visualizzazione codice, del file “Service1” in modo che scriviamo il codice per realizzare il nostro primo servizio.
Nell’evento onstart scriviamo il codice che ci permetterà di scrivere in un file di testo e creare un oggetto di tipo timer, dove tramite l’evento Elaps ad intevalli di tempo, eseguire determinanti frammenti di codice.
Prima di scrivere il codice per l’evento onstart, occorre creare il gestore dell’evento Elapsed, che riguarda l’evento dell’oggetto Timer.
Qui di seguito si riporta il frammento di codice per entrambi i linguaggi.


VB.Net

Sub tempoEsecuzione_Elapsed(sender As Object, e As System.Timers.ElapsedEventArgs)

        My.Computer.FileSystem.WriteAllText("D:\Progetti\Servizio\log.txt", "evento Elapsed", True)

    End Sub

C#

void tempoEsecuzione_Elapsed(object sender, System.Timers.ElapsedEventArgs e)

        {

            File.AppendAllText("D:\\Progetti\\Servizio\\log.txt", "\n" + "evento Elapsed");

        }


Qui di seguito si riporta il frammento di codice per entrambi i linguaggi riguarda l’evento Start


VB.Net

Protected Overrides Sub OnStart(ByVal args() As String)

 

        Dim tempoEsecuzione As New System.Timers.Timer

 

        Try

            System.Threading.Thread.Sleep(7000)

            My.Computer.FileSystem.WriteAllText("D:\Progetti\Servizio\log.txt", vbCrLf & "Evento OnStart", True)

            Dim intervallo As String = ConfigurationManager.AppSettings("INTERVALLOATTIVITA").ToString()

            My.Computer.FileSystem.WriteAllText("D:\Progetti\Servizio\log.txt", "Intervallo: " & intervallo, True)

            tempoEsecuzione.Enabled = True

            tempoEsecuzione.Interval = Convert.ToInt32(intervallo)

            AddHandler tempoEsecuzione.Elapsed, AddressOf tempoEsecuzione_Elapsed

            tempoEsecuzione.Start()

            'Codice

        Catch ex As Exception

            My.Computer.FileSystem.WriteAllText(Environment.CurrentDirectory + "\\Errore.txt", "\n" & "Si è verificato il seguente errore: " & ex.Message, True)

 

        End Try

 

    End Sub

 

C#

    protected override void OnStart(string[] args)

        {

            System.Timers.Timer tempoEsecuzione = new System.Timers.Timer();

            File.AppendAllText("D:\\Progetti\\Servizio\\log.txt", "\n" + "Evento OnStart");

            try

            {

 

                System.Threading.Thread.Sleep(7000);

                string intervallo =  ConfigurationManager.AppSettings["INTERVALLOATTIVITA"].ToString();

                File.AppendAllText("D:\\Progetti\\Servizio\\log.txt", "Intervallo: " + intervallo);

               

                tempoEsecuzione.Enabled = true;

                tempoEsecuzione.Interval = Convert.ToInt32(intervallo);

                tempoEsecuzione.Elapsed += tempoEsecuzione_Elapsed;

                tempoEsecuzione.Start();

               //Codice

 

 

 

 

            }

            catch (Exception ex)

            {

                File.AppendAllText(Environment.CurrentDirectory + "\\Errore.txt", "\n" + "Si è verificato il seguente errore: "  + ex.Message);

            }

 

 

        }


Qui di seguito il codice completo della classe Service



VB.Net

Imports System.Configuration

 

Public Class Service1

 

    Protected Overrides Sub OnStart(ByVal args() As String)

 

        Dim tempoEsecuzione As New System.Timers.Timer

 

        Try

            System.Threading.Thread.Sleep(7000)

            My.Computer.FileSystem.WriteAllText("D:\Progetti\Servizio\log.txt", vbCrLf & "Evento OnStart", True)

            Dim intervallo As String = ConfigurationManager.AppSettings("INTERVALLOATTIVITA").ToString()

            My.Computer.FileSystem.WriteAllText("D:\Progetti\Servizio\log.txt", "Intervallo: " & intervallo, True)

            tempoEsecuzione.Enabled = True

            tempoEsecuzione.Interval = Convert.ToInt32(intervallo)

            AddHandler tempoEsecuzione.Elapsed, AddressOf tempoEsecuzione_Elapsed

            tempoEsecuzione.Start()

            'Codice

        Catch ex As Exception

            My.Computer.FileSystem.WriteAllText(Environment.CurrentDirectory + "\\Errore.txt", vbCrLf & "Si è verificato il seguente errore: " & ex.Message, True)

 

        End Try

 

    End Sub

    Sub tempoEsecuzione_Elapsed(sender As Object, e As System.Timers.ElapsedEventArgs)

        My.Computer.FileSystem.WriteAllText("D:\Progetti\Servizio\log.txt", "evento Elapsed", True)

    End Sub

       

    Protected Overrides Sub OnStop()

 

    End Sub

 

End Class

 

 

C#

 

using System.Configuration;

 

namespace Servizio

{

    public partial class Service1 : ServiceBase

    {

        public Service1()

        {

          

            InitializeComponent();

          

 

        }

 

        protected override void OnStart(string[] args)

        {

            System.Timers.Timer tempoEsecuzione = new System.Timers.Timer();

            File.AppendAllText("D:\\Progetti\\Servizio\\log.txt", "\n" + "Evento OnStart");

            try

            {

 

                System.Threading.Thread.Sleep(7000);

                string intervallo =  ConfigurationManager.AppSettings["INTERVALLOATTIVITA"].ToString();

                File.AppendAllText("D:\\Progetti\\Servizio\\log.txt", "Intervallo: " + intervallo);

               

                tempoEsecuzione.Enabled = true;

                tempoEsecuzione.Interval = Convert.ToInt32(intervallo);

                tempoEsecuzione.Elapsed += tempoEsecuzione_Elapsed;

                tempoEsecuzione.Start();

               //Codice

 

 

 

 

            }

            catch (Exception ex)

            {

                File.AppendAllText(Environment.CurrentDirectory + "\\Errore.txt", "\n" + "Si è verificato il seguente errore: "  + ex.Message);

            }

 

 

        }

 

        void tempoEsecuzione_Elapsed(object sender, System.Timers.ElapsedEventArgs e)

        {

            File.AppendAllText("D:\\Progetti\\Servizio\\log.txt", "\n" + "evento Elapsed");

        }

 

        protected override void OnStop()

        {

        }

 

      

    }

}

 



Installazione

Per testare il servizio, non ci resta che avviarlo, come se fosse una semplice applicazione console, che eseguirà il codice, ma per installarlo nel nostro sistema, bisogna utilizzare i comandi del framework.
Aprire il prompt di Visual Studio, in modalità amministratore e scrivere il seguente “installutil PercorsoServizio\NomeServizio.exe” dove percorsoServizio sta ad indicare la cartella in cui si trova, mentre nomeservizio il file eseguibile comprensivo di estenzione,   in questo modo permette di installare nel pc il servizio.
Ci verrà visualizzato un messaggio del tipo “ Nessun programma di installazione pubblico con l'attributo RunInstallerAttribute.Yes è stato trovato nell'assembly “
Il messaggio di errore è dovuto al fatto che non abbiamo installato il programma di installazione, per farlo, bisogna andare nella parte “Design” del servizio (quella grigia che abbiamo visto all’inizio) , se ci troviamo nel codice, fare click con il taso destro e selezionare dal menu “Visualizza la finestra di progettazione” a questo punto, tasto destro nella finestra di progettazione e selezionare la voce di menu “Aggiungi programma di installazione” Figura 2.



 
 Figura 2 – La voce di menu

Verranno aggiunti due controlli (figura 3 ) che permettano l’installazione del servizio.


Figura 3 – I controlli aggiunti per effettuare l’installazione del servizio.

Selezioniamo il controllo denominato “ServiceProcessInstaller1” e nella finestra della proprietà “Account” selezioniamo il valore “LocalService” in questo modo verrà impostato il tipo di account per l’esecuzione del servizio.
Selezioniamo il controllo denominato “ServiceInstaller1” e nella finestra delle proprietà, impostiamo per la proprietà “Descriptiont” Un valore, di tipo “Servizio scritto in vb” a questo punto impostiamo la proprietà “DisplayName” che è il nome che verrà visualizzato.
Impostiamo il valore “Primo Servizio”, e compiliamo la soluzione, a questo punto eseguiamo il comando per l’installazione del servizio “installutil Percorso\NomeServizio.exe” mentre per d’installare bisogna aggiungere il parametro /U subito dopo il comando installutil “installutil /U Percorso\NomeServizio.exe”
Ora non ci resta che andare nella finestra dei servizi ed avviare il servizio, per vedere nel file di log, quello che sta scrivendo.

Conclusioni

In questo articolo si è visto come realizzare un semplice servizio per Windows, ed effettuare l’installazione tramite i comandi dal prompt.
Lo sviluppo dei servizi Windows non è semplice, in particolare nella fase di debug che richiede una certa complessità.
L’articolo ha voluto fornire al lettore le basi per questo iniziale approccio ad uno scenario poco utilizzato.