2

我有一个 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)

我得到了 False 。

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

此外,如果我创建一个引用此 VB.NET 程序集的 VB.NET 项目并以管理员权限运行它,一切正常。

4

1 回答 1

3

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

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

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

于 2012-04-14T19:45:00.590 回答