2009-12-15 2 views
1

Когда я запускаю свое приложение на компьютере моего друга под Windows 7, у меня возникает ошибка безопасности .NET.Проблема безопасности .NET Framework

Вот скриншот

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

и здесь проявляется

<?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> 

Как я могу это исправить в Visual Basic 2010?

благодаря

EDIT: Я сделал временное решение, как этого

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: Я также понял, что мой друг Победит 7 любопытным сломан, она даже не загружается SSL certf. веб-страниц. странно

+0

Пожалуйста, покажите нам подробную информацию (может быть, она содержит stracktrace?). Если он содержит стек, покажите нам код в этой позиции. – Heinzi

+0

Я просто использую «RegistryKey» и «Application.CommonAppDataRegistry», он дает ошибку из-за запроса на доступ к реестру. Я думаю, –

ответ

1

Пожалуйста, посмотрите здесь: Demand UAC elevation for an application by adding a manifest using mt.exe

+0

Я прочитал его, но в Visual Basic 2010 нет закладки Build events, я не знаю, на самом деле я не мог понять, что текст как vb beginner :), но я добавил информацию о манифестах на мой вопрос –

+0

Вам нужно щелкнуть правой кнопкой мыши свой проект и выбрать «Свойства»; Там вы увидите вкладку «События»; (ну, у меня один с консольным типом проекта) –

+0

извините, но на самом деле нет такой вкладки в свойствах в Visual Basic 2010 –

3

ли вам нужно записи или читать от общего AppData реестра?

  • Если вам нужно только чтения: Измените код таким образом, что ваш RegistryKey требуется только разрешение только на чтение.

  • Если вам нужно записи: Только администраторы могут писать HKEY_LOCAL_MACHINE, что где общий Appdata проживает. Таким образом, ваше приложение требует разрешений администратора, который требует высоты в Windows Vista или 7. На данный момент, вы должны снова принять решение:

    • Если это действительно важно, что эти данные распределяются между пользователями и все в порядке, что только администраторы могут использовать ваше программное обеспечение: запустите приложение с помощью Right-mouse-button/Run as administrator или добавьте манифест, как это предлагает Рубенс.

    • Если все в порядке, данные сохраняются на одного пользователя, вместо этого используйте Application.UserAppDataRegistry.

0

Вы пытались добавить требование безопасности на метод для указанного ключа, я думаю, что это приводит к UAC пинать в случае необходимости. Измените атрибут Write на любой ключ, к которому вы обращаетесь.

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

End Sub 

Или добавьте это в свою AssemblyInfo.В.Б:

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

Должен ли я добавить это к функции, к которой я обращаюсь? –

+0

Вы можете добавить первый атрибут к классу или методу, который вы вызываете, второй, который вы можете добавить в файл AssemblyInfo.vb (в проводнике решений вам нужно нажать «Показать все файлы»). –

0

Пожалуйста, измените,

Эта линия

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

В

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

, в вашем файле манифеста.

Смежные вопросы