小さなデスクトップアプリケーション(メインフォーム)をC#言語(.net)で作成します。そして、「camtasia studio screenrecoder」のように、アプリケーションをスタートメニュー(Windows 8)の一番上に配置したいと思います。
小さなアプリケーションに必要なスクリーンショットを参照してください。
アプリケーションにどのコードを追加する必要がありますか?
注:を設定しようとしましたがtopMost = true
、機能しません。
Metroの上にウィンドウが必要な場合は、アクセシビリティを宣言するためにウィンドウが必要です。重要なポイントは次のとおりです。
アプリケーションはuiAccess(app.manifest)を要求する必要があります
アプリケーションは、「最上位」のウィンドウ配置をアサートする必要があります(プログラムまたはその他の方法で、Win32/SetWindowPosまたはWinForms/WPFの「最上位」プロパティのいずれかで)
グループポリシー設定を変更せずに、信頼できる場所[C:\ Windows、C:\ Program Files、C:\ Program Files(x86)]にインストールする必要があります。
a。注:任意の場所から実行できるようにする場合は、セキュリティ設定を無効にする必要があります:「ユーザーアカウント制御:安全な場所にインストールされているUIAccessアプリケーションのみを昇格させる」。
b。注2:これは、HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ System\ValidateAdminCodeSignaturesを0に設定するのと同じです。
上記のアプリケーションはデバッガーで実行できません
.NETアプリケーションの場合
a。マニフェストは、ビルド後のステップに埋め込む必要があります
b。アプリケーションには「遅延署名」が必要です(つまり、ビルドしてアタッチすることはできますが、組み込みのデバッガーから実行することはできません。これはMicrosoftが行うことです)。
アプリケーションは、信頼できる証明書で署名する必要があります。
上記の信頼できる証明書は、信頼されたルート認証局にインストールする必要があります(これは重要です!単にインストールするだけではいけません)
詳細については、http: //msdn.microsoft.com/en-us/library/ms726294を参照してください。
アプリケーションをMetroのユーザーインターフェイスより上に強制するには、次の手順を実行する必要があります。
CreateWindowEX
およびを変更しますset WS_EX_TOPMOST
Project.Properties
てリンクします。/uiAccess = "true"
SignTool
てアプリケーションに署名します。Program Files
アプリケーションがまたはに保存されていることを確認しますProgram Files (x86)
Start Menu
と、アプリケーションはMetroの上で実行されているはずです。マニフェストは次のようになります。
<trustInfo xmlns="urn:0073chemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="highestAvailable"
UIAccess="true" />
</requestedPrivileges>
</security>
</trustInfo>
デフォルトではfalse
、属性が省略されている場合、またはアセンブリのマニフェストが存在しない場合に設定されます。これfalse
を使用すると、にアクセスできなくなりますProtectedUI
。
セキュリティの詳細については、こちらをご覧ください。
これは、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
}
}
}
このような機能を確実に処理できるようにするか、少なくとも機能が機能しない可能性があることをユーザーに警告します。上記では、実際に呼び出しを保護してメソッドを呼び出すことに注意してください。_level
そうすれば、いつでも値にアクセスして、認証が存在し続けることを確認できます。また、不要な呼び出しを回避するために、必要な場合にのみ継承または使用されます。うまくいけば、それがお役に立てば幸いです。
コメントの更新:
これはC#プロジェクト用であり、次のように呼び出します。
using System.Diagnostics;
上記のアセンブリは、機能を提供します。次に、メソッド内で次を呼び出します。
Process command = new Process();
command.StartInfo.FileName = "notepad.exe";
command.Start();
ご覧のとおり、技術的なものではありませんが、を呼び出したりbatch
、プログラムを開いたり、などの他のユーティリティを実行したりすることもできますmsiexec
。うまくいけば、それがお役に立てば幸いです。