2009-08-17 1 views
4

私のアプリケーションへのアクセスを1つの特定のユーザーアカウントに制限する必要があります。私はWMIの下でクラスを見つけてユーザーアカウントを見つけましたが、自分のアプリケーションを実行していることを認識する方法はわかりません。WMI:プログラムを実行しているユーザーアカウントの名前を取得するにはどうすればよいですか?

あなたのanserwsに事前に感謝します。

答えて

6

現在のユーザー名を取得するには、WMIを使用するよりも簡単な方法があります。

WindowsIdentity.GetCurrent()Nameは現在のWindowsユーザーの名前を取得します。

Environment.Usernameは、現在ログインしているユーザーの名前を取得します。

これらの2つの違いは、WindowsIdentity.GetCurrent().Nameにはドメイン名とユーザー名(つまり、adrianではなくMYDOMAIN\adrian)も含まれているということです。 Environmentからドメイン名が必要な場合は、Environment.UserDomainNameを使用できます。

EDIT

あなたが本当にWMIを使用してそれを実行したい場合は、あなたがこれを行うことができます:あなたが得るためにそれを列挙しなければならないので、

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem"); 
ManagementObjectCollection collection = searcher.Get(); 
string username = (string) collection.Cast<ManagementBaseObject>().First()["UserName"]; 

残念ながら、インデクサプロパティはManagementObjectCollectionではありません最初の(そして唯一の)結果。

+0

ありがとう、ずっと簡単ですが、私はそれを使用しますが、WMIでそれを行う方法はありますか? – backslash17

+0

ご迷惑をおかけして申し訳ありません! – backslash17

1

最も簡単な方法は、環境クラスを介してである:(役割のためにチェックすることがより一般的ですが)

string user = Environment.UserDomainName + "\\" + Environment.UserName; 

はまた、特定のユーザーに制限するには、いくつかの方法があります。低レベルのビットより信頼性の高い可能性があり

[PrincipalPermission(SecurityAction.Demand, Name = "domain\\john", 
     Authenticated = true)] 
void MyMethod() 
{ 
} 

、再利用可能:また、クラス全体または特定のメソッドに次の属性を使用することができます明らか

if (userName == "domain\\john") 
{ } 

は別に

メソッド。

両方を使用して、プログラムの通常の流れの一部としてif()を使用するユーザーと、重要なメソッドの保護手段として属性をチェックすることができます。

関連する問題