Installare applicazione con ClickOnce – Microsoft Defender SmartScreen

Recentemento ho sviluppato per uso personale una applicazione Desktop con C# in Visual Studio 2019, e ho pensato di semplificare la distribuzione degli aggiornamenti utilizzando la tecnologia ClickOnce, di cui ho sempre sentito parlare ma mai utilizzato, anche se gratuita. L’unico requisito è avere accesso ad una cartella pubblica su un hosting (e un accesso ftp) per pubblicare il pacchetto di distribuzione ClickOnce.

Qui un esempio di come appare la pagina del link pubblico che viene distribuito:

Innanzitutto il setup su Visual Studio sembra semplice, ma insorgono i primi problemi quando si vuole una applicazione che ha privilegi elevati, ovvero qualsiasi applicazione desktop che salvi dei file, acceda al registro di sistema e così via. Nessun problema se fosse una app che utilizza solo Web Api.

Quindi, se non ho capito male, non è una tecnologia progettata principalmente per distribuire applicazioni “pubbliche” su internet, ma si adatta maggiormente per l’ambito di reti aziendali (intranet) e similari.

Per bypassare questo limite e semplificare la configurazione, ho dovuto rimuovere la “signature” dal progetto, e quindi ora l’applicazione che cerco di distribuire non è più “sicura” e Microsoft Defender SmartScreen mi dice che “ha impedito l’avvio di un’app non riconosciuta. L’esecuzione di tale app potrebbe costituire un rischio per il PC.”.

Per fortuna, seguendo il link “Ulteriori informazioni”, è possibile avere una ulteriore opzione oltre a “Non eseguire”, il pulsante “Esegui comunque“.

Questo ovviamente è una soluzione che deve essere utilizzata solo ed esclusivamente se vi fidate della sorgente/autore dell’applicazione.

A questo punto l’applicazione viene scaricata e il setup provvede a installare l’applicazione.

Un’altra nota negativa che ho riscontrato è che ad ogni aggiornamento cambia la cartella di installazione.
Questo richiede un accorgimento particolare se si volesse utilizzare un file di configurazione (tipo un json) che possa essere editato dall’applicazione, perchè poi viene ri-creata l’installazione ex-novo con il file originale al prossimo aggiornamento.
Per avere una cartella che risulti costante indipendentemente dalla versione (e indipendente quindi dagli aggiornamenti) bisogna utilizzare la cartella indicata da ApplicationDeployment.CurrentDeployment.DataDirectory, ma utilizzabile solo se ApplicationDeployment.IsNetworkDeployed è true. Se ApplicationDeployment.IsNetworkDeployed è false, ad esempio mentre si esegue l’applicazione con Visual Studio, il valore di ApplicationDeployment.CurrentDeployment sarà null.
Nel mio caso quindi, per ottenere il base path della cartella delle impostazioni ho utilizzato:


string basePath = ApplicationDeployment.IsNetworkDeployed ? ApplicationDeployment.CurrentDeployment.DataDirectory : "";

Add a Comment

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *