2

VB.NET プロジェクトからビルドされた .NET アセンブリを参照する C# プロジェクトがあります。

この 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 に答える