1

管理者権限が必要な C#/.NET アプリケーションを開発しています。WinXP および Win7 で動作します。ユーザーが標準ユーザー (管理者グループのメンバーではない) として実行されているときに特権の昇格を要求するために、次の行でマニフェストを埋め込みます。

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

そして、UACがオンになっている場合、Win7で正常に動作します。ユーザーは権限の昇格、資格情報の入力などを求められます。
問題は、Win7 で UAC がオフになっている場合です。アプリケーションは、UAC プロンプトなしで、昇格された権限なしで起動します。

UAC がオフになっているときに、昇格とポップアップ UAC プロンプトを要求する方法はありますか?

4

1 に答える 1

2

いいえ、しかし回避策があります。

UAC がオフになっていても、アプリケーションを管理者として実行できなくなるわけではありませ(管理者パスワードを持っていると仮定すると、そうであるように見えます)。ご指摘のとおり、UAC を無効にrequireAdministratorしてマニフェストに設定すると、Microsoft が示すように、右クリックして選択Run as administratorしても実際にはプロセスが昇格しません。「アプリケーションは起動する可能性がありますが、後で失敗します

2 つのステップ:

1) Shift キーを押しながらアプリケーションを右クリックし、 を選択しますRun as a different user。次に、管理者のユーザー名とパスワードを使用して認証を行うだけで、アプリケーションは管理者として実行されます。それは私のために働いた。

スクリーンショット

asInvoker2)管理者権限を実行してチェックする小さな実行可能ファイルを作成します。それらなしで実行すると、ユーザーに警告し、Shift-右クリックしてからRun as a different user. 小さなプログラムに管理者アクセス権がある場合は、 を使用ShellExecuteしてプライマリrequireAdministratorアプリケーションを呼び出します。フロー図については、こちらの図 9を参照してください。UACがオフになっているため、基本的に組み込みのUACダイアログを独自のものに置き換えています。

以下は、管理者アクセスをチェックする StackOverflow のどこかにある C++ の小さなコード サンプルです。

BOOL IsUserAdmin(VOID)
{
   BOOL b;
   SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
   PSID AdministratorsGroup; 
   b = AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdministratorsGroup); 
   if(true==b) 
   {
      if (!CheckTokenMembership( NULL, AdministratorsGroup, &b)) 
      {
         b = FALSE;
      } 
      FreeSid(AdministratorsGroup); 
   }
   return(b);
}
于 2013-11-05T19:10:33.037 に答える