首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在“开始”菜单的顶部创建自己的应用程序?

如何在“开始”菜单的顶部创建自己的应用程序?
EN

Stack Overflow用户
提问于 2013-01-31 15:36:30
回答 2查看 3.7K关注 0票数 13

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

请看我的小应用程序所需的截图。

我必须在应用程序中添加哪些代码?

注意:我已经尝试设置topMost = true,但这不起作用。

EN

回答 2

Stack Overflow用户

发布于 2013-02-02 20:38:09

如果您想要在Metro顶部设置一个窗口,则需要它来声明可访问性。以下是要点:

  1. 应用程序必须要求uiAccess (app.manifest)
  2. 应用程序必须断言“最顶层”窗口的定位(无论是在WPF 32/SetWindowPos中还是在WinForms/WPF的“最顶层”属性中,无论是以编程方式还是其他方式)
  3. 在不更改组策略设置的情况下,必须将其安装到某些受信任的位置C:\Windows、C:\Program、C:\Program (x86)。

注意:如果希望能够将其运行到任意位置,则必须禁用安全设置:“用户帐户控制:只提升安装在安全位置的UIAccess应用程序”。

b. Note2:这与将Note2设置为0相同

  1. 不能在调试器中运行上述应用程序。
  2. 如果是.NET应用程序

清单必须嵌入在构建后的步骤中。

应用程序必须有“延迟签名”(这意味着它不能从内置调试器运行,尽管您可以构建和附加-这是微软所做的)

  1. 应用程序必须使用受信任的证书签名。
  2. 所述受信任证书必须安装到受信任的根证书颁发机构(这很重要!它不能简单地安装)

有关更多信息,请参见:http://msdn.microsoft.com/en-us/library/ms726294

票数 6
EN

Stack Overflow用户

发布于 2013-02-05 23:21:27

为了将应用程序强制置于Metro的用户界面之上,您需要执行以下操作:

  1. 创建一个Win32项目
  2. 完成向导而不作任何更改。
  3. 更改CreateWindowEXset WS_EX_TOPMOST
  4. 转到Project.Properties并链接到清单文件。
  5. 更改UAC以绕过UI保护;应该是/uiAccess = "true"
  6. 建立你的项目。
  7. 使用SignTool对应用程序进行签名。
  8. 确保应用程序存储在Program FilesProgram Files (x86)
  9. 运行你的应用程序。
  10. 加载您的Start Menu,您的应用程序应该运行在Metro之上。

你的舱单看起来应该是:

代码语言:javascript
复制
<trustInfo xmlns="urn:0073chemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
        <requestedExecutionLevel
            level="highestAvailable"
            UIAccess="true" />
        </requestedPrivileges>
    </security>
</trustInfo>

默认情况下,如果省略属性,或者程序集不存在清单,则将其设置为false。使用它,false将无法访问ProtectedUI

有关安全性的更多信息可以找到这里

下面是一个可以运行或允许修改以测试UAC的脚本:

代码语言:javascript
复制
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;

上述程序集将为您提供该功能。然后,在一个方法中只调用以下内容。

代码语言:javascript
复制
Process command = new Process();
command.StartInfo.FileName = "notepad.exe";
command.Start();

正如您所看到的,它不是技术性的,但它将允许您调用batch、打开程序,甚至可以运行其他实用程序,如msiexec。希望这能帮上忙。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14629406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档