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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top