適切な方法は、ユーザーアクセス制御(UAC)を無視することではなく、これらのパラメーター内でテストすることです。そうすれば、セキュリティを混乱させることなく、代わりにその範囲内で作業できます。
セキュリティを無効にすると、エクスプロイトのリスクが発生します。いくつかのセキュリティテストを提供するSecunaによると、中小企業、怠惰な開発者アプリケーション、そして明らかにセキュリティを無視しているアプリケーションが注目されているアプリケーションであることに気づきました。
つまり、アプリケーションはある時点で被害者になる可能性があります。
私が採用するアプローチは、UAC内でのテストです。タスクを実行するための適切な権限が存在することを確認してください。そうすれば、昇格された権限で常に実行されないようになります。例は次のとおりです。
class Elevated_Rights
{
// Token Bool:
private bool _level = false;
#region Constructor:
protected Elevated_Rights()
{
// Invoke Method On Creation:
Elevate();
}
#endregion
public void Elevate()
{
// Get Identity:
WindowsIdentity user = WindowsIdentity.GetCurrent();
// Set Principal
WindowsPrincipal role = new WindowsPrincipal(user);
#region Test Operating System for UAC:
if (Environment.OSVersion.Platform != PlatformID.Win32NT || Environment.OSVersion.Version.Major < 6)
{
// False:
_level = false;
}
#endregion
else
{
#region Test Identity Not Null:
if (user == null)
{
// False:
_level = false;
}
#endregion
else
{
#region Ensure Security Role:
if (!(role.IsInRole(WindowsBuiltInRole.Administrator)))
{
// False:
_level = false;
}
else
{
// True:
_level = true;
}
#endregion
}
}
}
これらの線に沿った何かにより、UACに対してテストしてから、タスクを実行できます。なぜUACを無効にしたいのかよくわかりませんが、それが私のアプローチです。
うまくいけば、それがお役に立てば幸いです。