System.Security.SecurityException: Unable to create Hook

Testando la funzinalità di un programma basato sul .NET Framework 1.1 in modaltà terminal server su Windows 2008 Server sono incappato nell’eccezione in oggetto.

L’eccezione è generata dall’utilizzo da parte dell’applicazione della funzione System.Windows.Forms.SendKeys.SendWait che richiama la System.Windows.Forms.SendKeys.Send che a sua volta invoca il metodo System.Windows.Forms.SendKeys.InstallHook che genera l’eccezione.

L’errore è descritto nel seguente Visualizzazione del messaggio di errore “Impossibile creare Hook” quando si esegue un’applicazione basata su .NET Framework 1.1 in un computer basato su Windows Vista:

Quando si esegue un’applicazione basata su Microsoft .NET Framework 1.1 in un computer basato su Microsoft Windows Vista, si utilizza una classe System.Windows.Forms.SendKeys nell’applicazione. Se il servizio Controllo accesso utente è avviato, l’applicazione genera un’eccezione di protezione. Viene inoltre visualizzato il seguente messaggio di errore:
Impossibile creare Hook

A parte la soluzione non consigliabile di disabiltare l’UAC per risolvere il problema è possibile installare l’hotfix NDP1.1sp1-KB925168-X86.exe. L’hotfix è disponibile solo a 32 bit in quanto a partire da Windows 2003 SP1 la versione a 32 bit del .NET 1.1 è supportata in architetture a 64 bit tramite WOW64, a riguardo si veda .NET Framework version 1.1 for 64-bit operating systems.

[Update 01] Il problema si presenta anche in Windows 7 dove può essere risolto sempre grazie a questa hotfix.
La sequenza di installazione è la seguente: