Ciao Guys,
Finalmente torno a scrivere sul mio blog, oggi per una cosa che potrebbe risultare utile a chi deve far lavorare applicazioni desktop, stile la mia Toolbar di internet exproler, ma su computer messi in adn con policy che bloccano alcune cartelle agli utenti non amministratori.
Problema:
---------------------------
La Toolbar è una windows application, sviluppata col .net Framework 3.5, come ben sapete essendo una libreria di classi, dalla sua Build verranno generate solo le dll, che verranno copiate col il setup nella GAC (Global Assembly Cache) affinchè essa funzioni.
Ora mi contatta un utente e mi dice che, una volta installata la toobar, aprendo ie risulta essere bloccata la voce nel menu di attivazione dei componenti aggiuntivi/toolbar di ie. Mi dice che loro sono utenti di uno specifico dominio e che probabilmente hanno qualche accesso negato.
Penso io “Avranno bloccato l’accesso a C:\Windows\assembly ???”
---------------------------
Mi metto un pò alla ricerca di come fare, e dopo svariate pagine di internet e blog aperti, scopro che la soluzione era proprio li… sulla guida msdn :D
Soluzione:
---------------------------
Ho aggiunto al progetto il file app.config, rinominato con il nome del progetto (es. MioProgetto.config) e al suo interno ho introdotto queste righe di codice all’interno della sezione <configuration>:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="myAssembly1"
publicKeyToken="32ab4ba45e0a69a1"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name=" myAssembly2"
publicKeyToken="32ab4ba45e0a69a1"/>
</dependentAssembly>
<probing privatePath="paths"/>
</assemblyBinding>
</runtime>
</configuration>
---------------------------
Dove
<assemblyBinding> : Contiene le informazioni sul reindirizzamento della versione degli assembly e i relativi percorsi.
xmlns : E’ un attributo obbligatorio e specifica lo spazio dei nomi xml necessario per l’associazione degli assembly. Io ho utilizzato, come da consiglio su msdn, la stringa "urn:schemas-microsoft-com:asm.v1" come valore.
<dependentAssembly> : Incapsula il criterio di associazione e il percorso dell'assembly per ciascun assembly. Utilizzare un elemento dependentAssembly per ciascun assembly.
<assemblyIdentity> : Contiene le informazioni di identificazione relative all'assembly. È necessario includere questo elemento in ciascun elemento dependentAssembly.
name : Il nome dell’assemby. E’ un attributo obbligatorio.
culture : Stringa che specifica la lingua e il paese relativi all'assembly. E’ un attributo facoltativo.
publicKeyToken : Valore esadecimale che specifica il nome sicuro dell'assembly. E’ un attributo facoltativo.
<probing /> : Specifica le sottodirectory di base dell'applicazione per fare in modo che in Common Language Runtime venga effettuata la ricerca durante il caricamento degli assembly.
privatePath : E’ un attributo obbligatorio e serve a specificare le sottodirectory della directory di base dell'applicazione che potrebbero contenere gli assembly. Separare ciascuna sottodirectory con un punto e virgola (io ho messo un path assoluto e ha funzionato lo stesso).
Buildo la solution, buildo il setup e faccio una prova….Ma va che quelli di msdn avevano dancora una volta ragione loro :D
Spero che il post vi risulti chiaro e di aiuto.
Saluti
G.