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:
- Microsoft .NET Framework Version 1.1 Redistributable Package
- Microsoft .NET Framework 1.1 Service Pack 1
- .NET Framework 1.1 Service Pack 1 CLR Security Update for Windows 2000, Windows XP, Windows 2003 Server x64/IA64 and Windows 2003 Server R2 x64/IA64, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2
- Microsoft .NET Framework 1.1 Service Pack 1 Update for using SendKeys under Microsoft Windows Vista