以编程方式访问所有用户开始菜单

fre*_*e0n 12 .net c# special-folders setup-deployment

有谁知道如何以编程方式访问"所有用户"启动菜单?

在XP中,位于:

C:\Documents and Settings\All Users\Start Menu\Programs\Startup
Run Code Online (Sandbox Code Playgroud)

在Windows 7中,位于此处:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
Run Code Online (Sandbox Code Playgroud)

具体来说,我有一个安装和部署项目,我想在所有用户的Startup菜单中为应用程序添加一个快捷方式,以便每当有人登录时启动应用程序.

编辑:我很确定这是布莱恩得到答案的地方.

Mik*_*ray 21

在.NET 4 CommonStartMenu中添加了Environment.SpecialFolder枚举,因此您可以使用:

Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu)
Run Code Online (Sandbox Code Playgroud)


Bri*_*ndy 17

Environment.GetFolderPath对于所有用户开始菜单的常规方式没有常量定义,但您可以通过使用Win32 API以这种方式执行此操作SHGetSpecialFolderPath:

class Program
{
    [DllImport("shell32.dll")]
    static extern bool SHGetSpecialFolderPath(IntPtr hwndOwner,
       [Out] StringBuilder lpszPath, int nFolder, bool fCreate);
    const int CSIDL_COMMON_STARTMENU = 0x16;  // All Users\Start Menu

    static void Main(string[] args)
    {
        StringBuilder path = new StringBuilder(260);
        SHGetSpecialFolderPath(IntPtr.Zero, path, CSIDL_COMMON_STARTMENU, false);
        string s = path.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)