I write a small desktop application (main form) in the C# language (.net). And i want to have my application in top of the start menu (Windows 8), just like the \"camtasia s
In order to force your application above Metro's User-Interface you'll need to do the following:
CreateWindowEX
and set WS_EX_TOPMOST
Project.Properties
and link to manifest file./uiAccess = "true"
SignTool
to sign the application.Program Files
or Program Files (x86)
Start Menu
and your application should be running above Metro.Your manifest should look like:
By default it is set to false
if the attribute is omitted, or a manifest doesn't exists for your assembly. With it false
you will not be able to gain access to ProtectedUI
.
More information on the security can be found here:
Here is a script that may work or allow modification to test 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
}
}
}
Something like that to ensure that it you can handle or at least alert the user that the feature may not work. Please note that in the above I actually protect the call and invoke the method; that way I can access the _level
value at any point to ensure the authentication remains present. And it is only inherited or used when desired to avoid unnecessary calls. Hopefully that helps.
Update for Comment:
This is for your C# Project, you'd call the following:
using System.Diagnostics;
The above assembly will provide you the capability. Then inside a method just invoke the following.
Process command = new Process();
command.StartInfo.FileName = "notepad.exe";
command.Start();
As you can see it isn't to technical, but it will allow you to call a batch
, open a program, or even run other utilities such as msiexec
. Hopefully that helps.