Errore RegistryPermission durante la chiamata da un'app console C#
-
23-08-2019 - |
Domanda
Cerco solo qualche indicazione prima di imboccare la strada sbagliata.Ho scritto una piccola app console C# che si apre, legge, scrive ed elimina dal nostro registro utenti sia sotto HKEY_LOCAL_MACHINE che HKEY_CURRENT_USER
Naturalmente, sono riuscito a farlo funzionare sul mio PC e su tutti i PC di prova, ma uno dei nostri clienti riceve un errore quando tenta di eseguire il file .exe
System.Security.SecurityException:La richiesta di autorizzazione di tipo "System.Security.Permissions.RegistryPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" non è riuscita.
at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) at System.Security.CodeAccessPermission.Demand() at Microsoft.Win32.RegistryKey.CheckSubKeyReadPermission(String subkeyName) at Microsoft.Win32.RegistryKey.CheckOpenSubKeyPermission(String SubkeyName, booleano> subkeywritable) su Microsoft.win32.registerykey.opensubkey (nome stringa, booleano writeble) su EstateMasterclereg.program.main (String [] args)
L'azione fallita è stata:
Richiesta.Il tipo della prima autorizzazione non riuscita era:System.Security.permissions.registryPermission La zona dell'assemblea che ha fallito era:Intranet
Dato che non sarò in grado di testarlo sui computer client (e mi hanno detto che hanno il file .exe in esecuzione localmente e hanno effettuato l'accesso come amministratore), c'è qualcosa che posso fare per provare a garantire che l'app venga eseguita su qualsiasi macchina?
È necessario utilizzare una chiave con nome sicuro e EnablePartiallyTrustedCallers oppure è necessario utilizzare System.Security.Permissions.RegistryPermission?
Grazie per l'aiuto.
Soluzione
Sembra che stiano eseguendo il tuo eseguibile in rete.Chiedi loro di provare a copiarlo su un disco rigido locale e di eseguirlo di nuovo.Le autorizzazioni assegnate all'eseguibile differiscono tra l'esecuzione da una condivisione di rete e l'esecuzione da una condivisione di rete.in esecuzione dal file system locale.
In alternativa, potrebbe essere possibile che abbiano modificato le impostazioni di sicurezza predefinite, in modo che, anche se eseguito localmente, sia considerato parte della zona Intranet.Controlla anche quelli.
Anche i suggerimenti qui possono essere utili:
http://blogs.msdn.com/shawnfa/archive/2003/06/20/57023.aspx
Tieni presente che se assegni all'assembly un nome sicuro, avrai comunque bisogno che la politica di sicurezza locale venga modificata per fornire all'assembly le autorizzazioni appropriate.Il nome sicuro di per sé non concederà l'autorizzazione aggiuntiva richiesta.