Программно доступ Все Пользовательское Меню "Пуск"

Кто-либо знает, как программно получить доступ ко "Всем Пользователям" Меню Запуска?

В XP, расположенном здесь:

C:\Documents and Settings\All Users\Start Menu\Programs\Startup

И в Windows 7, расположенном здесь:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

А именно, у меня есть проект Установки и Развертывания, и я хотел бы поместить ярлык на приложение в меню Startup для всех пользователей так, чтобы приложение было запуском каждый раз, когда любой входит в систему.

Править: Я вполне уверен, это - то, где Brian получил свой ответ от.

12
задан fre0n 25 February 2010 в 18:59
поделиться

3 ответа

Не существует константы, определенной для обычного способа 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();
    }
}
17
ответ дан 2 December 2019 в 03:14
поделиться

Вы можете получить доступ к папке запуска, используя соответствующее свойство MSI (подробнее см. здесь): [StartupFolder]

Однако, как это типично для пользовательско-зависимых переменных MSI, это свойство указывает либо на папку запуска пользователя, либо на папку запуска всех пользователей, в зависимости от значения свойства ALLUSERS.

Это означает, что при установке для "Всех" (для каждой машины) вы получите папку

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\

в противном случае вы получите папку для каждого пользователя в профиле пользователя. Это сделано специально и имеет смысл, так как при установке для каждого пользователя не будет разрешения на запись в папку всех пользователей.

В проекте Setup and Deployment сделайте следующее, чтобы поместить файлы в папку запуска:

  • откройте представление File System,
  • щелкните правой кнопкой мыши дерево папок и добавьте пользовательскую папку.
  • в свойствах этой папки установите DefaultLocation на [StartupFolder]
  • добавьте содержимое в пользовательскую папку
2
ответ дан 2 December 2019 в 03:14
поделиться

«Все пользователи» находится в переменной среды ALLUSERSPROFILE:

C:\>dir "%ALLUSERSPROFILE%\Start Menu"
 Volume in drive C is awesome
 Volume Serial Number is 8C57-DB1A

 Directory of C:\Documents and Settings\All Users\Start Menu

12/28/2009  10:27 PM    <DIR>          .
12/28/2009  10:27 PM    <DIR>          ..
12/28/2009  10:01 PM             1,566 Microsoft Update.lnk
02/23/2010  09:57 PM    <DIR>          Programs
12/28/2009  10:27 PM             1,563 Set Program Access and Defaults.lnk
12/28/2009  08:51 PM               398 Windows Catalog.lnk
12/28/2009  08:51 PM             1,507 Windows Update.lnk
               4 File(s)          5,034 bytes
               3 Dir(s)  64,214,460,416 bytes free
4
ответ дан 2 December 2019 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: