C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 管理者権限で実行しているかどうかを調べるには


(過去ログ 80 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■47610 / inTopicNo.1)  管理者権限で実行しているかどうかを調べるには
  
□投稿者/ ひんぬー (1回)-(2010/03/09(Tue) 15:34:47)

分類:[VB.NET/VB2005 以降] 

はじめまして。vb2008でアプリを作成しているのですが、
メンテナンス用に管理者権限でのみ動くアプリを作成しております。
管理者権限で実行するために、このアプリのプロジェクト内のapp.manifestは以下のようにしています。

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

しかし、Windows Vista以降のOSでは、管理者のユーザ名・パスワードを入力すれば管理者権限で実行することができるのですが、
XPの場合はそもそもexeを管理者として実行するという概念がありませんので、管理者でなくとも、管理者のユーザ名・パスワードを
入力することなく起動することができてしまい、結局、管理者しかアクセスできない場所を書き換えようとしても、
アクセスエラーとなってしまいます。
そこで、あらかじめ、このアプリが管理者権限で実行されているかどうかを調べ、管理者権限で実行されていないのであれば、
警告を表示してアプリを終了するということができればいいなと思うのですが、アプリ自身が管理者権限で実行されているかどうかを
調べる方法はありますでしょうか?
もし可能であれば、そのやり方をご教示頂きたく、宜しくお願い申し上げます。
また、Vista以降であれば、manifestにより、起動しているのであれば必ず管理者権限であると思いますので、
XPの場合について判断すればいいと思いますが、そうなると、まずはOSの判断を行う必要があるのでしょうか?
もしOS依存を考慮せずに対応できるのであれば一番ありがたいです。
宜しくお願い申し上げます。

引用返信 編集キー/
■47612 / inTopicNo.2)  Re[1]: 管理者権限で実行しているかどうかを調べるには
□投稿者/ aetos (246回)-(2010/03/09(Tue) 16:38:18)
No47610 (ひんぬー さん) に返信

Windows 2000 以降であれば、Windows API の IsUserAnAdmin 関数が使えそうです。
サンプルは検索すれば出てくるでしょう。

引用返信 編集キー/
■47634 / inTopicNo.3)  Re[2]: 管理者権限で実行しているかどうかを調べるには
□投稿者/ ひんぬー (2回)-(2010/03/10(Wed) 11:11:19)
No47612 (aetos さん) に返信
IsUserAnAdminについて、以下のサイトを参考にしてみたところ、うまくいきました。
参照サイト:【VB.NET】管理者権限の有無を調べる http://blog.livedoor.jp/akf0/archives/51447819.html
結果:
・Windows XP
 管理者権限のユーザの場合、IsUserAnAdmin = Trueを確認。
 管理者権限以外のユーザの場合、IsUserAnAdmin = Falseを確認。
・Windows Vista・Windows 7
 管理者権限のユーザの場合、IsUserAnAdmin = Trueを確認。
 管理者権限以外のユーザの場合、manifestにより管理者のユーザ名・パスワードの問い合わせがあり、
 管理者ユーザを入力するとIsUserAnAdmin = Trueを確認。
 (管理者ユーザ入力をキャンセルした場合は、そもそもこのアプリは起動しないので問題なし)

従って、単純にIsUserAnAdminの戻り値のみを判断して処理実行判断をすればよいことが分かりました。
aetos さん、ありがとうございました。
これにてこの質問はクローズさせて頂きます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -