2012-04-14 75 views
2

我有一个C#项目引用了从VB.NET项目构建的.NET程序集。混合C#和VB.NET项目中的UAC

此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程序集并使用管理权限运行它,所有工作都很好。

回答

3

有MSDN文章中记下My.User可能是显著:

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

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

+0

这个吧,谢谢! – max333 2012-04-15 08:16:38