我有一个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程序集并使用管理员权限运行它,一切运行良好。
答案 0 :(得分:3)
MSDN文章中有关于My.User的注释可能很重要:
对于Windows应用程序,默认情况下,只有基于Windows应用程序模板构建的项目才会初始化My.User对象。在所有其他Windows项目类型中,必须通过显式调用My.User.InitializeWithWindowsUser方法或通过为CurrentPrincipal赋值来初始化My.User对象。
请不要犹豫,跳过My.User并使用C#方法。