Blog Stats
  • Posts - 13
  • Articles - 0
  • Comments - 7
  • Trackbacks - 0

 

lunedì 26 settembre 2011

Creare il setup con InnoSetup direttamente da Visual Studio

Buongiorno a tutti.

 

Per i miei progetti creati con Visual Studio, uso InnoSetup per creare i file d'installazione da distribuire.

Dato che InnoSetup ha un ottimo sistema di CommandLine per i più disparati comandi, ho pensato di compilare il Setup direttamente da Visual Studio. Vi spiego come ho fatto:

Innanzi tutto ho creato un file bat nella stessa cartella del progetto C# (va bene anche VB). Nel file Bat ho scritto semplicemente due righe di codice: una per cancellare il file Setup esistente, e l'altra per compilare quello nuovo:

cd ..\..
call %windir%\system32\del C:SetupMioProgramma.exe
call "C:\Program Files (x86)\Inno Setup 5\compil32.exe" /cc "C:\IS_Setup\MioProgramma.iss"

Come potete notare, la seconda riga non fa altro che eseguire il compilatore di InnoSetup passandogli il file di script InnoSetup che crea il file di Setup che serve a me.

Andando in Visual Studio e precisamente nelle proprietà del progetto, basta aggiungere un richiamo al file di compilazione nel Post-build event command line.

Dato che non voglio che mi crei il setup tutte le volte che testo il programma, ho messo la condizione che se il progetto è in Release crea il setup, altrimenti no:

if $(ConfigurationName) == Release call ..\..\compilaSetup.bat $(ConfigurationName)   $(TargetName).

Spero che serva a qualcuno.

 

sabato 24 settembre 2011

Disattivare il caricamento automatico dei Controlli in Toolbox in WPF

Tra le tante funzionalità di Visual Studio, c'è quella che aggiunge automaticamente nella ToolBox di Visual Studio, i vari Components creati nella soluzione.

Questo "problema" (io lo chiamo problema perchè me ne inserisce moltissime) si aveva già ai tempi di WinForm e la simpatica Sabrina C. ci aveva svelato come risolvere questo "problema" in questo suo post:

http://community.dotnetwork.it/sabrina/archive/2009/03/30/disattivare-il-caricamento-automatico-dei-controlli-in-toolbox.aspx

Purtroppo anche disattivando questa opzione, andando a lavorare in WPF, il problema rimane.

Questa è la soluzione che lo risolve in WPF:

Andate nelle opzioni di Visual Studio Tools/Options/Text Editor/XAML/Miscellaneous e disabilitate la voce "Automatically populate toolbox items"; riavviate Visual Studio ed il vostro ToolBox sarà nuovamente pulito.

Senza lavorare su questa opzione, è possibile scavalcarlo semplicemente decorando i vostri component con il System.ComponentModel.DesignTimeVisibleAttribute. In questo modo avrete la possiblità di specificare se farlo apparire o no, nella finestra di progettazione.

venerdì 2 aprile 2010

Un buon giudizio su un prodotto gratuito di Mamma Microsoft.

Da quando Mamma Microsoft ha messo in rete il suo prodotto chiamato Windows Defender, l'ho preso subito come mio firewall preferito: in lingua Italiano, semplice da capire e poi ...visto che è un prodotto Microsoft penso che dia meno problemi di compatibilità tra vari programmi.....
Molte volte mi sono scontrato tra vari giudizi positivi e negativi su questo prodotto...
Da una settimana che un mio cliente mi assilla per un Virus (qualsiasi pagina visita gli esce una pagina con scritto: Warning! Visiting this site may harm your computer! ecc.. ) entratogli nel PC. Il Cliente ha un Antivirus molto noto, ma è stato tanto inteligente da fare OK all'installazione del virus e "Consenti" all'avviso dell'Antivirus.
Dopo varie ricerche, scansioni con vari antivirus..ecc....ho tentato di mettergli Windows Defender..
dopo l'aggiornamento delle definizioni e la prima Analisi puf: WD trova l'intruso e provvedo subito a rimuoverlo...
Funziona alla grande...Problema Risolto..
Grazie Mamma Microsoft...

lunedì 18 gennaio 2010

Huawei E1692 non si connette con Vista SP2

Installando il service pack 2 di Windows Vista, alice mobile con chiavetta usb non si connette più.
Lo stesso problema è riscontrabile in Windows 7.

Il problema si risolve modificando un opzione del programma Alice Mobile.

Nel menu Strumenti-> Opzioni-> Rete-> Tipo di connessione occorre selezionare RAS e non NDIS come di default e tutto si risolve.

 

lunedì 30 novembre 2009

Mio primo articolo tecnico su DotNetRomaCeSta

Ebbene si. Ringraziando che m'ha dato fiducia, ho fatto un bell'articolo su www.dotnetromacesta.org

La mia MessageBox temporizzata
la trovate a questo indirizzo: http://www.dotnetromacesta.org/common/articoli/windowsapp/varie/La_mia_MessageBox_temporizzata.aspx

A voi i commenti..

lunedì 19 ottobre 2009

Aprire WPF Window da WinForms

Se vi capita, come è successo a me, di fare una Dll per un vostro programma ma volete inserire al posto del classico WinForm, una Window di WPF, potete facilmente farlo così:

Al posto della classica DLL, create una “Libreia di Controlli Utente WPF”.

al suo interno inserite una “Finestra WPF (Window)”.

dopo aver compilato (nel mio pc registro la dll in GAC. andiamo nel progetto WinForm e dopo aver importato nei riferimenti la dll WPF  e la DLL PresentationFramework, importando lo spazio dei nomi “System.Windows.Forms.Integration” nella Form dove si trova il Button che aprirà la Window WPF..

Andiamo nell’evento Click del Button che dovrà richiamare la nostra Window e scriviamo questo:

 

Dim wpfwindow As New WPFWindow.Window1
ElementHost.EnableModelessKeyboardInterop(wpfwindow )
wpfwindow .Show()

Provate e vedrete la Window aprirsi nella vostra applicazione WinForm..

 

Ottimo modo per entrare pin piano in questo fantastico mondo WPF.

Un grazie a Alessandro Del Sole per la dritta sul “ElementHost”.

lunedì 12 ottobre 2009

Configurare SQL Server 2005Express per consentire le connessioni remote

Dato che per me è stato un calvario capire come configurare SQLExpress per essere connesso da remoto, una volta riuscito ho deciso di scrivermi l'appunto. Poi ho pensato: perchè non renderlo pubblico a tutti?

Ecco come ho fatto:

Dopo aver installato SQL2005Express (d'ora in poi chiamerò SQLE) e il MANAGER di SQLExpress, ho provato se localmente si connetteva.

A me s'è connesso subito senza preblemi.

 

Sono andato sulla macchina remota e ho inserito questi dati nel Manager di SQL:

Tipo Server: Motore di database
Nome Server: Server\SQLEXPRESS
Autenticazione: Autenticazione di SQL Server
Nome Account di access: sa
Password: mia pass

Per chi non lo sapesse "sa" è l'utente principale di SQL (Così ho capito, ma forse sbaglio).

Il nome "SERVER\SQLEXPRESS" è il server dove si trova SQL con il nome dell'istanza SQL. (forse sbaglio col nome "istanza").

Faccio Connetti e nulla: un errore enorme lungo un km....

Vado sul PC server e faccio partire il programma "SQL Server Configuration Manager".

Vado nelle configurazione di rete SQL Server 2005 e attivo solo il Protocollo TCP/IP, imposto dalle proprietà l'attivazione dell'IP1.

Per defaul dopo l'istallazione, SQL non avvia SQL Browser ma per le connessioni remote  bisogna attivarlo.
Per fare questo uso l'utiliti "Configurazione superfice di attacco di SQL Server":

  • Selezionare "Configurazione superficie di attacco per servizi e connessioni"
  • Selezionare il componente "SQL Server Browser" ed impostare "tipo di avvio" su "Automatico"
  • Riavviare il PC e vi troverete SQL Server Browser avviato (potete controllare da "SQL Server Configuration Manager".

Per ultimo vado nel Firewall di Windows e metto i due programmi nelle eccezioni, rispettivamente:

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe

C:\Program Files\Microsoft SQLServer\90\Shared\sqlbrowser.exe

Vado dal PC Remoto e tutto funziona..

Grazie a tutti.

Attivare SilverLight su IIS

Dopo innumerevoli guide dall'amico Alessandro del Sole sul fantastisco mondo di SilverLight, mi sono messo a fare qualche scherzetto con il programma Deep Zoom Composer, sempre consigliato da Alessandro D. S. .

Premetto che ho alcuni domini registrati su vari Server tra cuoi uno (il mio: panatronic.it) su un mio server con Win2003 e IIS.

ho fatto una piccola gallery e l'ho uplodata sul mio stazio web del mio dominio. ho messo tutta la cartella che Deep Zoom Composer mi crea nell'esportazione e precisamente il contenuto della cartella "DeepZoomProjectWeb".

sui server di aziende importanti (non cito per non fare pubblicità) funziona tutto ok ma sul mio no.

A questo punto decido di risolvere il problema sul server: prima cosa installo .Net 3.5 sul server. Per l'installazione nessun problema tranne che un avviso di protezione sull'aggiornamento di alcuni file che dal titolo dell'avviso (Library C++) ritengo sia un aggiornamento di librerie c++ di sistema; non potevo far altro che OK ed ho continuato.

Dopo questa installazione ho provato ma nulla. Ancora non funzionava. Allora ho provato ad installare i runtime di SilverLight andando via web in quella pagina pubblicata della gallery direttamnte dal server e dato che non c'era ancora installato i runtime di SL, ho ricevuto l'avviso d'installazione. Faccio l'installazione ma nulla.

A questo punto chiedo nel nostro forum "Argomenti Vari" e subito l'amico Alessandro D. S. mi suggerisce di installare il .Net 3.5 e i runtime di SilverLight che avevo precedentemente fatto.

Effettivamente non pensavo fosse un problema di runtime e vado a vedere che errore mi da nella pagina: l'errore specificava che si trattava di settaggio del server Web, quindi IIS.

Dato che tra le varie prove ho impostato la cartella contenente la gallery con tutti i permessi di tutto, sicuramente era un settaggio legato proprio tra IIS e SL.

facendo un poco di ricerche sul web con l'amico google incappo in un documento di una nota azienda che da servizio hosting che parla di estensioni MIME abilitate sui suoi server win2003. Tra le estensioni elencate si trovava l'estensione .xap che si riferisce ad applicazioni SilverLight.

A questo punto vado sulle proprietà del sito web in IIS e precisamente nel menù HTTPHeaders -> MIME types ed aggiungo questa types:
Estensione: .xap
Types: application/x-silverlight-app.

Faccio la prova e funziona perfettamente.
Ora non so se installando solo il .Net 3.5 o solo il runtime di SL e poi impostando questa opzione sarebbe andato bene comunque.
Magari in un'altra situazione farò queste prove. Comunque su questo Server mi servirà prima o poi il .Net 3.5, quindi meglio così.

è vero: volete vedere la gallery? è la gallery che vi ha già mostrato l'amico Marco Chillemi della sua piccola vacanza nel Salento: Gallery Salento . Attendo Voi per le prossime Gallery.

I Parametri "Table-Valued" di SQLServer 2008

I Parametri "Table-Valued" sono stati introdotti con SQL Server 2008 (sotto sugerimento di Luca Bianchi) e ci permettono di inviare un intera DataTable ad una istruzione T-SQL o Routine senza creare nessuna tabella temporanea o altro del genere.

Per poter inviare l'intera DataTable ho fatto una semplice SP che riceve da una Select i dati dal parametro Table-Value e lo inserisce "INSERT" nella tabella desiderata.

Ecco come ho fatto:

Partiamo da VB e dalla creazione della DataTable.

   1:   Dim dtTable As New DataTable
   2:   Dim col As DataColumn
   3:  col = New DataColumn("ID", GetType(Int32))
   4:  dtTable.Columns.Add(col)
   5:  col = New DataColumn("Descrizione", GetType(String))
   6:  dtTable.Columns.Add(col)

ora inserieamo alcuni dati nella DataTable:

   1:  Dim printRow As DataRow = dtTable.NewRow
   2:  printRow("ID") = 1
   3:  printRow("Descrizione") = "Patate di stagione"
   4:  dtTable.Rows.Add(printRow)
   5:  printRow("ID") = 2
   6:  printRow("Descrizione") = "Arance Siciliane"
   7:  dtTable.Rows.Add(printRow)
   8:  printRow("ID") = 3
   9:  printRow("Descrizione") = "Mele di stagione"
  10:  dtTable.Rows.Add(printRow)

 

Ora andiamo su SQL con il Manageri di SQL2008 e creamo un Type personalizzato di tipo Table-Value:

   1:  CREATE TYPE dbo.TTableType AS TABLE
   2:      ( ID int, Descrizione nvarchar(Max) )
 
Ora creamo la Stored Procedure con il parametro di tipo Table-Value appena creato:
   1:  create PROCEDURE [dbo].[SpInTable] 
   2:  (@Tab dbo.TTableType readonly ) 
   3:   
   4:  AS 
   5:   
   6:  BEGIN TRAN 
   7:  SET NOCOUNT OFF; 
   8:   
   9:  INSERT INTO 
  10:  [intec].[dbo].[TabMia] (ID, Descrizione )
  11:      SELECT ID, Descrizione FROM @Tab;
  12:   
  13:  COMMIT TRAN 
Perfetto. Ora non ci rimane altro che trasmettere la DataTable alla Stored Procedure dal nostro progetto VB:
   1:  Dim insertSpInTable As New SqlCommand("SpInTable", CnnS)
   2:  insertSpInTable.CommandType = CommandType.StoredProcedure
   3:  Dim ParamT As SqlParameter = insertSpInTable.Parameters.AddWithValue("@Tab", SqlDbType.Structured)
   4:  ParamT.SqlDbType = SqlDbType.Structured
   5:  ParamT.TypeName = "dbo.TTableType"
   6:  ParamT.Value = dtFR
   7:  insertSpInTable.ExecuteNonQuery()

Eccolo qui. Abbiamo passato un intera DataTable in una tabella SQL senza fare nessun ciclo come per esempio facevamo con VB6 e Access. Veramente molto veloce e preciso con una transazione sola. Questo potrebbe essere comodo per inserire, ad esmpio, i dettagli di una fattura, DTT o altro.
Spero che vi potrà essere utile nei vostri progetti altrimenti scusate per la noia arrecatovi. :-) :-)

domenica 27 settembre 2009

Scaricare file da Internet

leggendo una richiesta di un collega sulla maillist VBT&T ho pensato di risolvere questo mio problema che mi assilla da mesi. Anche io avevo bisogno di visualizzare una progressBar durante lo scaricamento di un file da internet.

Il tutto è fattibile con la classe System.Net.WebClient che fornisce tutti i metodi necessari. Per cominciare, basta creare una nuova variabile globale di tipo System.Net.WebClient:
Public Withevents TCP As New System.Net.WebClient
Abbiamo specificato la parola chiave Withevents per indicare al compilatore che di questa calsse useremo anche i suoi eventi: quindi potremo scrivere direttamente eseguite quando si generano eventi in TCP.
Per iniziare un download useremo il metodo DownloadFileAsync, che non solo ci permette di scaricare il file specificato nella locazione specificata (come vedremo tra breve), ma non blocca il form e consente di svolgere tutti gli eventi anche durante il download. La sintassi è la seguente:

 

TCP.DownloadFileAsync(URL , "C:\miofile.exe")

 

Per la gestine di una ProgressBar durante il Download del file basta gestire questo evento, generato quando c' è un progresso nel download. Ipotizziamo di avere una ProgressBar di nome "MyProgressBar". Ecco la sintassi:


Private Sub PrgChngd(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles TCP.DownloadProgressChanged
MyProgressBar.Value = e.ProgressPercentage 'restituisce la percentuale del download
Eventualmente potete visualizzare altri dati del donwload che ora commento perchè non servono
'e.BytesReceived 'restituisce il numero di bytes ricevuti
'e.TotalBytesToReceive 'restituisce il numero dei byte da ricevere
End Sub

Poi c'è questo evento che si scatena quando un download viene completato ed utile ad esempio per segnalarlo.
Ecco la sintassi dell'evento:
Private Sub PrgComplete(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles TCP.DownloadFileCompleted
If e.Cancelled = True Then
'il download è stato cancellato
Else
'il download è stato completato
End If
End Sub

Spero vi serva per i vostri programmi...

La classe Uri (System.Uri) indica univocamente un file sul web.
In questo modo inizierà il download.
Altri importanti metodi e proprietà di questa classe sono il "CancelAsync" che interrompe il download corrente e il "IsBusy" che restituisce vero se è in corso un download, altrimenti falso.
Dim URL As New Uri("http://www.miosito/miofile.exe")

 

 

Copyright © Stefano Pranzo