我用C#语言(.net)编写了一个小型桌面应用程序(主要形式)。我希望我的应用程序在“开始”菜单(Windows 8)的顶部,就像"camtasia studio屏幕编码“一样。
请看我的小应用程序所需的截图。

我必须在应用程序中添加哪些代码?
注意:我已经尝试设置topMost = true,但这不起作用。
发布于 2013-02-02 20:38:09
如果您想要在Metro顶部设置一个窗口,则需要它来声明可访问性。以下是要点:
注意:如果希望能够将其运行到任意位置,则必须禁用安全设置:“用户帐户控制:只提升安装在安全位置的UIAccess应用程序”。
b. Note2:这与将Note2设置为0相同
清单必须嵌入在构建后的步骤中。
应用程序必须有“延迟签名”(这意味着它不能从内置调试器运行,尽管您可以构建和附加-这是微软所做的)
有关更多信息,请参见:http://msdn.microsoft.com/en-us/library/ms726294
发布于 2013-02-05 23:21:27
为了将应用程序强制置于Metro的用户界面之上,您需要执行以下操作:
CreateWindowEX和set WS_EX_TOPMOSTProject.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。希望这能帮上忙。
https://stackoverflow.com/questions/14629406
复制相似问题