Note di programmazione (blog di Rudy Azzan)

Note, appunti, di tutto un po' riguardo alla mia esperienza di programmatore
posts - 35, comments - 55, trackbacks - 8

My Links

News

Attualmente sto scrivendo un articolo C# 3.0 riguardo alle enumerazioni di System.Linq

Statistiche

Trova codice

Article Categories

Archives

Post Categories

Articoli Tecnici

Le mie creature

Tuesday, January 12, 2010

Anno nuovo e nuovo blog

Salve a tutti. Con l’anno nuovo ho deciso di innaugurare un mio nuovo blog intitolato: “Netrudy, appunti di un programmatore”, che parla non solo di programmazione e non solo di .Net.

Sono appena partito, se lo trovate interessante seguitelo!

Buon anno a tutti!

posted @ 1:55 PM | Feedback (0)

Wednesday, June 13, 2007

Determinare se SqlServer è installato

Per determinare via codice se sul vostro computer sia installato SqlServer, basta controllare la seguente chiave di registro:

//C#
public static bool IsSqlServerInstalled()
{
    bool isInstalled = false;
    RegistryKey regSql = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion");
    if (regSql.GetValue("CurrentVersion") != null)
    {
        isInstalled = true;
    }
    return isInstalled;
}


'VB
Public Shared Function IsSqlServerInstalled() As Boolean
    Dim isInstalled As Boolean = False

    Dim regSql As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion")

    If regSql.GetValue("CurrentVersion") IsNot Nothing Then
        isInstalled = True
    End If

    Return isInstalled
End Function

posted @ 12:29 PM | Feedback (0)

Thursday, May 31, 2007

Impedire l'esecuzione del programma ad un utente che non sia amministratore

Un esigenza molto comune per esempio, se si vuole fare una console di amministazione di un servizio è quella che un applicazione o un metodo siano eseguiti solo se l'utente appartiene ad un determinato gruppo che ha i permessi necessari, per esempio ad accedere ad una determinata risorsa. Nel seguente esempio scritto in C# se l'utente che esegue il thread non è un amministratore allora il metodo genera un eccezione e si può chiudere l'applicazione.

Come prima cosa bisogna applicare i criteri principali del dominio applicazione corrente a WindowsPrincipal, altrimenti una richiesta di autorizzazione principale avrà esito negativo.

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

Ora abbiamo bisogno di sapere quale è l'utente che sta eseguendo il thread corrente.

//Estrae l'identità dell'utente del thread corrente
WindowsIdentity wi = (WindowsIdentity)System.Threading.Thread.CurrentPrincipal.Identity;
                
//Estrae il nome utente da suo sid
IdentityReference mYaccount = wi.User.Translate(typeof(NTAccount));
//Visualizza il nome utente estratto da suo sid
MessageBox.Show("Utente:" + mYaccount.Value);

Adesso dobbiamo ricavare il gruppo administrator da assegnare alla funzione di controllo.
Per aiutarvi potete visualizzare i nomi dei gruppi a cui l'utente del thread appartiene così:

StringBuilder sbMsg = new StringBuilder();
foreach (IdentityReference sidRef in wi.Groups)
{
    IdentityReference account = sidRef.Translate(typeof(NTAccount));
    sbMsg.AppendLine(account.Value);
}
MessageBox.Show(sbMsg.ToString());

Ora per impedire all'applicazione di partire se non siamo amministratori, usiamo le seguenti istruzioni:

try
{
    PrincipalPermission permessi = 
        new PrincipalPermission(mYaccount.Value, "BUILTIN\\Administrators");
                
    permessi.Demand();
}
catch (SecurityException ex)
{
   MessageBox.Show(ex);
   //Esci dall'applicazione
}

posted @ 4:19 PM | Feedback (3)

Wednesday, May 09, 2007

DXCore - Plugin Central: Un mix di semplici add-ins

Continuo a parlare di DXCore, presentando questa collezione di add-ins che potete trovare qui: "DXCore Plugin Central"
Questi add-ins sono scritti in VB.NET ed essendo molto semplici e dotati di sorgenti, sono un ottimo punto di partenza per chi voglia imparare come funziona il framework DXCore.

Nel file zip che scaricherete trovate i seguenti progetti:

CR_ClipboardRing

Questo add-ins vi permette (dopo che avete associato le action: CycleClipboardForward e CycleClipboardBackward ad uno shortcut) di ciclare in avanti o indietro le ultime stringe da voi copiate in memoria (facendo copia o Ctrl+C) e inserirle nel punto in cui è posizionato il cursore in quel momento, sull'editor di testo di Visual-Studio.

ERRORE :
File: ClipboardRingPlugIn.vb
Riga: 149 - l_Start = NativeMethods.ClientToScreen(CType(New DevExpress.CodeRush.Win32.HWND(l_TextView.Handle), IWin32Window), l_Start)
Motivo: Quando compilo da il seguente errore: Error 4 'ClientToScreen' is ambiguous because multiple kinds of members with this name exist in class 'DevExpress.CodeRush.Win32.NativeMethods' C:\...\ClipboardRingPlugIn.vb 154 23 CR_ClipboardRing.
Correzione:

Deve esserci un errore a livello di librerie DevExpress.CodeRush.Common che ho corretto con il seguente workaround:

Dim obj As DevExpress.CodeRush.Win32.NativeMethods
Dim params() As Object = {CType(New DevExpress.CodeRush.Win32.HWND(l_TextView.Handle), _
 IWin32Window), l_Start}
l_Start = GetType(DevExpress.CodeRush.Win32.NativeMethods).InvokeMember("ClientToScreen", _
 Reflection.BindingFlags.InvokeMethod, Nothing, obj, params)

CR_HighlightTodo

Questo add-ins, aggiunge una sezione al menu di configurazione delle opzioni di DevExpress: "Options..." > "Editor" > "Painting" > "HighLight Comments". Qui potete inserire una stringa (o più) nella textbox "Comment Qualifier" ("ES.: "TODO:") e un colore nella texbox in "Color comment" (ES.: "Red"). A questo punto per ogni riga di commento nel vostro codice in cui compare la parola inserita in "Comment Qualifier", le successive parole saranno del colore indicato in "Color comment". Tutto ciò è utile per evidenziare l'intero commento o delle vostre sezioni personalizzate.

Esempio con HighlightTodo

CR_Metrics

Questo add-ins aggiunge una voce al menu DevExpress: "Tool Windows" > "Metrics" che selezionata apre una finestra. Se aprite un progetto e premete il bottone "Refresh" delle finestra di Metrics, saranno caricati e elaborati i dati delle varie classi. A questo punto si possono vedere classificati, funzione per funzione il numero di righe, la complessità del codice, e della sua manutenzione. E'un add-ins utile e interessante per far saltare subito agli occhi funzioni troppo lunghe o complesse.

Esempio con Metrix

N.B.: Purtroppo Metrics funziona solo per C#.

CR_ShowColor

E'uno dei miei add-ins preferiti. Permette di vedere la parola "Color" nel editor di testo di Visual Studio, sottolineata da un linea dello stesso colore, il cui nome segue la suddeta parola dopo un punto. Es.: in "Color.Red", "Color" è sottolineato in rosso. E'molto utile quando usate System.Drawing.

Esempio con ShowColor

CR_TrimTrailingSpaces

Per ogni riga di un file modificato che chiudete da Visual Studio, viene controllato se ci sono degli spazi alla fine e vengono rimossi.

ERRORE :
File: TrimTrailingSpacesPlugIn.vb
Riga: 81 - File.Delete(l_Filename & l_Filename & ".BeforeProcessing")
Motivo: Non elimina il file corretto perchè c'è un errore di scrittura, l_Filename è ripeturo 2 volte.
Correzione:

Al posto della 79 scrivo:

Dim newFile As String = l_Filename & ".BeforeProcessing"
If File.Exists(newFile) Then
 File.Delete(newFile)
End If

 

Al posto della 81 scrivo:

File.Delete(newFile)

 

Per tutti i progetti

Per compilare i sorgenti, basta lanciare il file .sln del relativo progetto con Visual Studio, poi copiare la dll generata nella cartella dei plugins di DXCore che solitamente si trova in "C:\Programmi\Developer Express Inc\DXCore for Visual Studio .NET\2.0\Bin\Plugins".

Per approfondimenti sul framework DXCore leggete il mio articolo qui: "Introduzione a DXCore".

posted @ 12:20 AM | Feedback (0)

Monday, May 07, 2007

DXCore - Commenter: Il codice si commenta da solo!

Commentare il codice in automatico avvolte è veramente una comodità. Per fare ciò scaricate questo add-in di Visual Studio chiamato Commenter e realizzato col framework di DXCore.
Lo potete trovare qui in una versione più recente: "Commenter"
Qui invece c'è il progetto originale e un mini tutorial: "Commenter CodeProject"

Fra le varie funzionalità Commentor ci permette di:

  • Creare delle intestazioni personalizzate per i files. Fra le varie voci queste intestazioni, viene segnalata la data di creazione del file e dell'ultima modifica.
  • Inserire una Using directives region attorno alle direttive using già presenti.
  • Convertire i commenti normali in commeti XML e aggiungere commenti normali in automatico solo chiudendo la dichiarazione di classe o il metodo con "}".
  • Auto commentare i blocchi di codice.

Inoltre abbiamo a disposizione alcune hotkeys:

  • Ctrl+1 : Esegue la stessa azione di quando si chiude un blocco di codice con "}", ma può essere usato dentro un metodo o una classe quando si vuole.
  • Ctrl+2 o Ctrl+. : Dovrebbe aggiungere un namespace per la parola corrente su cui si trova il cursore, ma a me non funziona.
  • Ctrl+3 : Aggiunge una region attorno al codice selezionato
  • Ctrl+4 : Dovrebbe comprimere e decomprimere nell'editor il codice selezionato, ma a me non funziona.
  • Ctrl+5 : Dovrebbe comprimere e decomprimere nell'editor ogni cosa al livello più alto, ma a me non funziona.
  • Ctrl+6 o Ctrl+F9 : Aggiorna tutti i commenti e i blocchi xml per tutto il file.

Una volta scaricato i sorgenti basta lanciare il file .sln e ricompilare il progetto con Visual Studio. Dopo copiate la dll generata nella cartella dei plugins di DXCore che solitamente si trova in "C:\Programmi\Developer Express Inc\DXCore for Visual Studio .NET\2.0\Bin\Plugins".

N.B.: Funziona bene solo per C#.

Per approfondimenti sul framework DXCore leggete il mio articolo qui: "Introduzione a DXCore".

posted @ 7:42 PM | Feedback (0)

Sunday, April 15, 2007

Internet Explorer - Disabilitare il blocco degli script per le risorse locali

Se aprite una pagina html da un file di risorse locale del vostro disco (Es.: "C:\temp\miofile.htm") che contiene del codice javascript con Internet Explorer, vi appare un fastidiosissimo messaggio che dice: "Per facilitare la protezione, è stato impedito a questa pagina web di eseguire script o controlli ActiveXc potrebbero accedere al computer. Fare click qui per ulteriori opzioni...". A questo punto cosa fate? Fate click e selezionate "Consenti contenuto bloccato..". Tutto ok, peccato che la prossima volta che tornate su quella pagina dovete ripetere l'operazione.

Blocco script IE

Se siete uno sviluppatore web e usate la funzione di "Preview" con un software tipo Microsoft Expressions, potete capire come ciò dopo 2, 3 volte cominci ad essere insopportabile!

Dopo un po' di ricerche e tentativi ho trovato il flag che vi da una mano: Da menu "Opzioni internet" di Internet Explorer selezionate l'etichetta "Avanzate", scorrete fino alla sezione "Protezione" e spuntate il flag "Consenti l'esecuzione di contenuto attivo in file di Risorse del computer*" e premete OK. Adesso riavviate il browser e potete dire addio al messaggio.

Opzioni di protezione IE

posted @ 2:22 PM | Feedback (8)

Thursday, April 12, 2007

DXCore - UnusedVariables: Per non dimenticare niente in giro!

Vi capita mai di dimenticare in giro per il codice delle variabili inutilizzate? Noo?!? Anche io lo pensavo ma questo add-in mi ha aperto gli occhi, infatti il suo scopo principale è evidenziare le variabili nel codice delle nostre classi  che non usiamo, e che quindi rimangono dimenticate, il tutto all'interno dell'editor di testo dell'IDE. Usandolo ho notato anche che è comodo perchè permette di seguire un certo ordine mentre si scrive il codice. Ti mette sempre in evidenza la variabile che ti servirà per continuare a scrivere la funzione.

Questo add-in per Visual Studio è realizzato col framework di DXCore si chiama UnusedVariables e lo potete trovare qui: "UnusedVariables"
Potete scaricarvi i file compilati oppure i sorgenti, per i quali basta lanciare il file .sln e ricompilare il progetto con Visual Studio, poi copiare la dll generata nella cartella dei plugins di DXCore che solitamente si trova in "C:\Programmi\Developer Express Inc\DXCore for Visual Studio .NET\2.0\Bin\Plugins".
Inoltre vi occorre una libreria di supporto che si chiama DX_Contrib e potete trovarla qui "DX_Contrib". Questa libreria è interessante perchè è una collezione di funzioni e controlli per lo sviluppo con DXCore. Anche essa va copiata nella cartella dei plugins di DXCore.

UnusedVariables funziona abbastanza bene, avvolte il refresh sull'editor non è corretto e ci sono alcuni bug gestiti da Visual Studio in background che rallentano l'IDE, ma avendo un buon PC il tutto è sopportabile, altrimenti ci sono i sorgenti scaricabili per modificare il tutto.

Per approfondimenti sul framework DXCore leggete il mio articolo qui: "Introduzione a DXCore".

posted @ 11:35 PM | Feedback (1)

Tuesday, April 10, 2007

Condividiamo i nostri interessi

Tempo fa ho fatto un post che parlava di un tool di Microsoft utilizzabile via browser che permetteva di organizzare i favoriti di IE per averli sempre a portata di mano ("Organizzare i favoriti di IE").
Oggi ve ne propongo un altro molto più interessante e pratico da usare, che ci permette di condividere i nostri link con tutti quanti e costruire e organizzare le nostre sotto reti. Provate anche voi e condividiamoci tutti i link interessanti per la programmazione.

Registratevi qui: "del.icio.us"

Questi sono i miei link condivisi:"del.icio.us/Ruby78"

posted @ 9:52 AM | Feedback (0)