Est-ce que quelqu'un sait-on comment accéder par programme au menu de démarrage "Tous les utilisateurs"?
in XP, situé ici: p> et dans Windows 7, situé ici: p> spécifiquement, j'ai un projet de configuration et de déploiement, et je voudrais mettre un raccourci à l'application dans le menu de démarrage de tous les utilisateurs afin que l'application commence chaque fois que quiconque se connecte. p> EDIT: Je suis sûr que c'est là que Brian a eu sa réponse de. P> P>
6 Réponses :
"Tous les utilisateurs" réside dans la variable d'environnement 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
Cela peut ne pas fonctionner en fonction de la localisation des fenêtres installées.
Cela fonctionne réellement sur Windows 7, mais cela ne pointe pas sur le dossier de démarrage.
Il n'y a pas de constante définie pour la manière normale de Environnement.GetFolderDePath Code> Pour le menu de démarrage de tous les utilisateurs, mais vous pouvez le faire de cette façon à l'aide de l'API Win32
ShgetspecialfolderPathe code> :
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();
}
}
J'aimerais avoir à utiliser l'API Win32, mais cela fait le travail.
Très courant de devoir utiliser l'API Win32 de C # :)
@ FRE0N: Si vous ne souhaitez pas utiliser API Win32, vous pouvez utiliser les propriétés MSI faites à cette fin.
références complètes dans Shlobj.h
Vous pouvez accéder au dossier de démarrage en utilisant la propriété MSI approprié (voir ici pour plus de détails): Cependant, comme typique pour les variables MSI en fonction de l'utilisateur, ce point de propriété soit dans le dossier de démarrage de l'utilisateur ou le dossier de démarrage tous les utilisateurs, en fonction sur la valeur de la propriété ALLUSERS. p> cela signifie que lorsque vous installez pour "Tout le monde" (par ordinateur), vous obtiendrez le dossier p> [StartupFolder code>]
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\
Vous pouvez également essayer!
string allUsers=Environment.GetEnvironmentVariable("ALLUSERSPROFILE")+ "\\Start Menu\\Programs";
in .NET 4 communstartmenu code> a été ajouté au
environnement.Specialfolder code> Enum
, vous pouvez donc utiliser: Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu)
Ceci est génial, toutefois, tente d'accéder à ce dossier de manière programmatique vous donnera "l'accès au chemin" C: \ Documents et Paramètres \ Tous les utilisateurs \ Démarrer Menu 'est refusé. " Donc, ne semble pas très utile.
@LogicsaurusRex par "Access" Vous voulez dire modifier des éléments dans le dossier? Cela nécessitera certainement des autorisations d'administrateur et s'applique à toutes les réponses à cette question non seulement celle-ci.
Dans mon cas, j'essayais simplement de supprimer un raccourci vers une application et d'appeler io.directory.getfiles sur ce chemin de menu de démarrage a explosé avec un accès refusé. Il semblerait que dans environ la moitié des cas, les gens voudraient modifier l'accès. En lecture seule semble être une utilité très limitée. C'est donc une chose d'avoir une voie à quelque chose, mais une autre pour pouvoir l'utiliser pour n'importe quoi. Je réalise que "en utilisant" le chemin n'était pas vraiment la question, mais la prochaine inférence logique inclurait l'utiliser et peut-être de modifier.
de C ++, comme pour le moment d'écriture, Microsoft encourage à utiliser Référence de Référence de toutes les valeurs disponibles de Enum info, que le processus d'appel est responsable de la libération des ressources, peut être trouvé dans la documentation de Veuillez noter que lorsqu'il est exécuté à partir du service, certaines valeurs ne sont pas disponibles (par exemple lié à Données de l'utilisateur, f.ex. Si quelqu'un Est disposé à savoir où Microsoft encourage à utiliser shgekknolderpath code> avec la valeur souhaitée de
connaisfolderid code> Enum. La valeur que vous devez utiliser est
folderid_commmonstartmenu code>. Dans votre cas, le code ressemblerait à:
ShgetKnowFolderPath code> est là:
https://msdn.microsoft .COM / FR-US / Bibliothèque / Windows / Bureau / BB762188 (v = vs.85) .aspx P> connaisfolderid code> est Là-bas:
https://msdn.microsoft .com / fr-US / bibliothèque / windows / bureau / dd378457 (v = vs.85) .aspx p> shgekknothladederpath code> dans la section documentation
ppszpath code> paramètre. p>
folderid_documents code>). De plus, si certaines valeurs ne sont pas disponibles si vous utilisez une architecture différente (F.EX. valeur liée à
folderid_programfileX64 code> n'est pas disponible sur le système d'exploitation 32 bits). P>
shgekknothfolderpath code> au lieu d'autres fonctions disponibles, veuillez lire le haut de la documentation de
shgetfolderPath code>. p> p>
Le crédit va à Brian R. Bondy; Il a répondu à la question comme je l'ai formé. J'ai fini par créer un dossier nommé "Startup" sous "Menu Programmes de l'utilisateur" (Affichage> Système de fichiers). Et j'ai invoqué l'utilisateur à installer le programme avec "Installer ... pour toi-même ou pour quiconque utilise cet ordinateur" défini sur "Tout le monde". Si l'utilisateur a sélectionné "juste moi", il n'aurait été placé que dans le menu de démarrage de cet utilisateur. Et je suppose que je vais bien avec ça. Je suppose que je [I> pourrait I> avoir copié un raccourci dans une action personnalisée à l'aide de la méthode de Brian ...