UAC在混合C#和VB.NET项目中

时间:2012-04-14 19:32:27

标签: c# .net vb.net

我有一个C#项目,它引用了一个从VB.NET项目构建的.NET程序集。

此VB.NET程序集需要管理权限。

我在C#项目中创建了一个清单:

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

一切似乎都很好:当我跑步时:

bool isAdmin = new WindowsPrincipal(WindowsIdentity.GetCurrent())
  .IsInRole(WindowsBuiltInRole.Administrator) ? true : false;

从我的C#代码中,我按预期获得isAdmin == True,但是当我从VB.NET DLL中调用一个方法时:

My.User.IsInRole(Microsoft.VisualBasic.ApplicationServices.BuiltInRole.Administrator)

我得错了。

这对我来说似乎非常不合逻辑。

此外,如果我创建一个VB.NET项目,引用这个VB.NET程序集并使用管理员权限运行它,一切运行良好。

1 个答案:

答案 0 :(得分:3)

MSDN文章中有关于My.User的注释可能很重要:

  

对于Windows应用程序,默认情况下,只有基于Windows应用程序模板构建的项目才会初始化My.User对象。在所有其他Windows项目类型中,必须通过显式调用My.User.InitializeWithWindowsUser方法或通过为CurrentPrincipal赋值来初始化My.User对象。

请不要犹豫,跳过My.User并使用C#方法。