Кто-либо знает, как программно получить доступ ко "Всем Пользователям" Меню Запуска?
В XP, расположенном здесь:
C:\Documents and Settings\All Users\Start Menu\Programs\Startup
И в Windows 7, расположенном здесь:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
А именно, у меня есть проект Установки и Развертывания, и я хотел бы поместить ярлык на приложение в меню Startup для всех пользователей так, чтобы приложение было запуском каждый раз, когда любой входит в систему.
Править: Я вполне уверен, это - то, где Brian получил свой ответ от.
Не существует константы, определенной для обычного способа 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();
}
}
Вы можете получить доступ к папке запуска, используя соответствующее свойство MSI (подробнее см. здесь): [StartupFolder
]
Однако, как это типично для пользовательско-зависимых переменных MSI, это свойство указывает либо на папку запуска пользователя, либо на папку запуска всех пользователей, в зависимости от значения свойства ALLUSERS.
Это означает, что при установке для "Всех" (для каждой машины) вы получите папку
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\
в противном случае вы получите папку для каждого пользователя в профиле пользователя. Это сделано специально и имеет смысл, так как при установке для каждого пользователя не будет разрешения на запись в папку всех пользователей.
В проекте Setup and Deployment сделайте следующее, чтобы поместить файлы в папку запуска:
[StartupFolder]
«Все пользователи» находится в переменной среды 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