【问题标题】:Creating shortcut inside windows start menu在 Windows 开始菜单中创建快捷方式
【发布时间】:2016-02-27 17:36:57
【问题描述】:

我无法创建快捷方式,甚至无法在 C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\ 中创建文件夹,并且在这两种情况下都会出现“访问被拒绝”错误。我正在使用 C++(WinAPI) 并且有兴趣在该文件夹中创建一个快捷方式。创建快捷方式的代码适用于其他位置(例如在桌面上创建快捷方式)。如何解决此错误?

【问题讨论】:

  • 您能否以自己的用户身份在该位置手动创建文件夹?
  • 是的,在 Windows 资源管理器中,Windows 上下文菜单中有“新建->文件夹”菜单项,但是该命令需要管理权限。
  • “该命令需要管理权限” - 所以,不,那么。尝试以管理员权限运行您的程序。
  • MSDN 上的文档是怎么说的?
  • 不要直接写信给%ProgramData%\Microsoft\Windows\Start Menu。使用CSIDL_COMMON_STARTMENU/FOLDERID_CommonStartMenu(所有用户)或CSIDL_STARTMENU/FOLDERID_StartMenu(当前用户)获取合适的路径,然后在其下创建自定义文件夹。

标签: c++ winapi shortcut access-denied startmenu


【解决方案1】:

写入所有用户的开始菜单需要 UAC 权限。因此,您需要以管理员身份运行您的应用程序。或者只使用当前用户的开始菜单 "C:\Users\[CurrentUser]\AppData\Roaming\Microsoft\Windows\开始菜单"

#include <windows.h>
#include <iostream>
using namespace std;

int main()
{
    string StartMenuLocation=
    (string)getenv("HOMEDRIVE")+"\\Users\\"+(string)getenv("USERNAME")+"\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu";
    cout<<StartMenuLocation;
    cin.get();
}

希望这会有所帮助。

【讨论】:

  • 这是基于未记录的内部结构,不保证有效。事实上,它甚至不适用于所有受支持的 Windows 版本。 comment by Remy Lebeau 解释了如何正确地做到这一点。
  • @xxx 您也可以考虑不建议基于答案的未记录行为的建议。你应该改进你的答案。
  • 如果您想解决问题,您应该从建议的答案开始。您拥有制定适用于所有 Windows 版本的强大解决方案所需的所有信息。
猜你喜欢
  • 2016-02-23
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
相关资源
最近更新 更多