2009-12-15 6 views
1

Lorsque j'exécute mon application sur l'ordinateur Windows 7 de mon ami, j'obtiens une erreur de sécurité .NET.Problème de sécurité .NET Framework

Voici une capture d'écran

alt text http://img707.imageshack.us/img707/1340/94161244.png

et ici est manifeste

<?xml version="1.0" encoding="utf-8"?> 
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity version="1.0.0.0" name="Myapp.app"/> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <!-- UAC Manifest Options 
      If you want to change the Windows User Account Control level replace the 
      requestedExecutionLevel node with one of the following. 

     <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 

      If you want to utilize File and Registry Virtualization for backward 
      compatibility then delete the requestedExecutionLevel node. 
     --> 
     <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</asmv1:assembly> 

Comment puis-je résoudre ce problème en 2010 de Visual Basic?

grâce

EDIT: J'ai fait une solution temporaire comme celui-ci

Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup 

      Dim a As New WindowsPrincipal(WindowsIdentity.GetCurrent()) 
      If Not a.IsInRole(WindowsBuiltInRole.Administrator) Then 
       MsgBox("Please Run the application as administrator") 
       e.Cancel = True 
      End If 

End Sub 

EDIT 2: J'ai aussi réalisé que la victoire de mon ami 7 est un peu cassé, il n'a même pas charger certf SSL. des pages Web. bizarre

+0

S'il vous plaît nous montrer les détails (peut-être qu'il contient une stracktrace?). S'il contient une pile, montrez-nous le code à cette position. – Heinzi

+0

je viens d'utiliser "RegistryKey" et "Application.CommonAppDataRegistry" il donne une erreur en raison de la demande d'accès au registre je suppose –

Répondre

1
+0

je l'ai lu, mais il n'y a pas d'onglet Construire des événements dans Visual basic 2010, je ne sais pas, en fait je ne pouvais pas comprendre texte en tant que débutant vb :) mais j'ai ajouté des informations manifestes à ma question –

+0

Vous devez cliquer avec le bouton droit sur votre projet et sélectionner Propriétés; Là, vous verrez l'onglet Construire les événements; (Eh bien, j'en ai un avec un type de projet de console) –

+0

désolé mais vraiment il n'y a pas cet onglet sur les propriétés dans Visual basic 2010 –

3

Avez-vous besoin de écrire ou lire du registre AppData commun?

  • Si vous ne devez lire : Changer votre code de sorte que votre seul RegistryKey nécessite des autorisations en lecture seule.

  • Si vous devez écrire : Seuls les administrateurs peuvent écrire à HKEY_LOCAL_MACHINE, qui est où réside AppData commun. Ainsi, votre application nécessite des autorisations administratives, ce qui nécessite une élévation dans Windows Vista ou 7. À ce stade, vous devez à nouveau prendre une décision:

    • S'il est vraiment important que ces données sont partagées entre les utilisateurs et il est normal que seuls les administrateurs puissent utiliser votre logiciel: Démarrez votre application avec Right-mouse-button/Run as administrator ou ajoutez un manifeste comme suggéré par Rubens.

    • Si vous souhaitez que les données soient stockées par utilisateur, utilisez plutôt Application.UserAppDataRegistry.

0

Avez-vous essayé d'ajouter une demande de sécurité sur la méthode de la clé spécifiée, je pense que cela provoque à coup dans l'UAC si nécessaire. Remplacez l'attribut Write par la clé de votre choix.

<System.Security.Permissions.RegistryPermission(Security.Permissions.SecurityAction.Demand, Write:="HKLM\Software")> _ 
Private Shared Sub Bob() 

End Sub 

Ou d'ajouter ceci à votre AssemblyInfo.vb:

<Assembly: System.Security.Permissions.RegistryPermission(Security.Permissions.SecurityAction.RequestMinimum, ViewAndModify:="HKLM\Software")> 
+0

devrais-je l'ajouter à la fonction où j'accède? –

+0

Vous pouvez ajouter le premier attribut à la classe ou à la méthode que vous appelez, le second que vous pouvez ajouter au fichier AssemblyInfo.vb (dans l'explorateur de solution, vous devrez cliquer sur "Afficher tous les fichiers"). –

0

S'il vous plaît changer,

cette ligne

<requestedExecutionLevel level="asInvoker" uiAccess="false" /> 

Dans

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

dans votre fichier manifeste.