2009-04-10 18 views

答えて

2

あなたは「ネットLOCALGROUP管理者」を実行し、出力を解析することができます。私は良い方法があると思うが、そうでない場合は...

+0

お返事ありがとうございます。このようにして、管理グループにグループが追加されても、ユーザーがそのグループに属しているかどうかを判断する必要があります。 –

0

ユーザーはローカルサーバーの「Administrators」グループに属することができます。また、「Domain Admins」または「Enterprise Admins」グループ広告。理想的な解決策は、IsUserAdmin(user_name)という名前のメソッドを使用してDLLを作成し、ユーザー名パラメータを受け取り、trueまたはfalseを返すことです。

内部的に、このメソッドは、IADsUser :: Groupsメソッドを呼び出して、指定されたユーザーが所属するグループを判別し、列挙されたグループが上記の管理者グループのいずれかに属する場合はtrueを返します。そうでない場合、falseを返します。このDLLは、InstallShieldプロジェクト内で呼び出すことができます。ネストしたグループには注意してください。

+0

thxでは、InstallShieldカスタムアクションでサポートされているvbscriptでこれを行うこともできます。私はまだ私が直接呼び出すことができるいくつかのwin32のDLLに似た機能があるのだろうかと疑問に思っています。 –

0

私は2つのアプローチを考えていますが、それぞれインストールスクリプトの上にコードを書くことになりますが、私はInstallshieldに詳しくは分かりませんが、おそらくVisual Studioセットアッププロジェクトのようにカスタム行動。私はそれがあなたが必要とするものだと思う。

私は最初のものの概要を説明しますが、2番目のものはかなり複雑です(つまり最初のものより複雑です)。明らかなアプローチはADです。次のコードスニペットは、ユーザー名とパスワードの組み合わせが存在するかどうかを示します。このコードを実行するアカウントは、ADにアクセスするための権限を持っていない場合、潜在的な問題はここにあり、今、私はあなたが彼らがしているもののグループを仕事ができると確信しているユーザー。

if (true == String.IsNullOrEmpty(userName)) throw new Exception("userName not set"); 

DirectoryEntry entry = new DirectoryEntry(); 
entry.Username = userName; // Use the fully qualified name here 
entry.Password = password; 

string DomainlessUsername = userName.Substring(userName.LastIndexOf('\\') + 1, userName.Length - userName.LastIndexOf('\\') - 1); 

// We know straight away that if this is empty, we've drawn a blank! 
if (true == String.IsNullOrEmpty(DomainlessUsername)) throw new Exception("userName not set"); 

DirectorySearcher search = new DirectorySearcher(entry); 
search.Filter = "(SAMAccountName=" + DomainlessUsername + ")"; 
search.PropertiesToLoad.Add("cn"); 

SearchResult result = search.FindOne(); 

if (null == result) 
{ 
    throw new Exception("FindOne executed without exception, but result was null"); 
} 
else 
{ 
    // some logging here 
} 
return true; 

を得ました。上記のコードを参考にすれば十分ですが、代替アプローチの基本原則は、advapi32.dllを直接LogonUserのような関数に移植することですので、この記事で詳しく説明しません。 (もう一度、私の問題は、管理者の権利をチェックしていない資格情報を検証していたことを覚えておいてください。

これはいくつか役立ちます。