分類:[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依存を考慮せずに対応できるのであれば一番ありがたいです。
宜しくお願い申し上げます。
|