我正在开始菜单中创建一个新的shorcut并更新我的程序 我工作了特殊环境变量ALLUSERSPROFILE,它在XP下为我工作,它返回正确的路径,当在vista下使用它时,返回c:\ ProgramData,这是无用的。读取环境变量StartMenu也没有意义,它返回空字符串。 (在vista上,它位于Windows \ Start Menu下,英文版,如果安装文件夹Windows具有默认名称) 有没有人有一个想法如何获取'所有用户'的startmenu目录。 它是一个在XP和Vista下运行的通用解决方案吗?
答案 0 :(得分:4)
你想要CSIDL_COMMON_STARTMENU
。这似乎没有在Environment.SpecialFolders
枚举中定义,但您可以使用Win32 API via P/Invoke:
[DllImport("shell32.dll")]
static extern bool SHGetSpecialFolderPath(IntPtr hwndOwner,
[Out] StringBuilder lpszPath, int nFolder, bool fCreate);
int CSIDL_COMMON_STARTMENU = 0x16;
StringBuilder path = new StringBuilder(260);
SHGetSpecialFolderPath(IntPtr.Zero, path, CSIDL_COMMON_STARTMENU, false);
CSIDL_COMMON_STARTMENU (FOLDERID_CommonStartMenu) 包含程序和文件夹的文件系统目录 出现在所有“开始”菜单上 用户。典型的路径是C:\ Documents 和设置\所有用户\开始菜单。 仅对Windows NT系统有效。
答案 1 :(得分:1)
不需要Win32 API,也没有手动注册表访问权限。 我使用的是Microsoft Framework 4.0,可以在 Win7 和 XP 下成功执行以下操作:
Dim diStartMenu As New IO.DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu))
fiShortCut = New IO.FileInfo(IO.Path.Combine(diStartMenu.FullName, ApplicationTitle & ".lnk"))
这将返回diStartMenu的以下路径:
C:\ProgramData\Microsoft\Windows\Start Menu
这完全符合
中的注册表值HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
答案 2 :(得分:0)
在注册表下查找我发现了以下密钥 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell文件夹 有一个名为Common Start Menu的值包含路径。它适用于vista和XP