12
votes

Accédez par programmation à tous les utilisateurs Démarrer le menu

Est-ce que quelqu'un sait-on comment accéder par programme au menu de démarrage "Tous les utilisateurs"?

in XP, situé ici: xxx

et dans Windows 7, situé ici: xxx

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.

EDIT: Je suis sûr que c'est là que Brian a eu sa réponse de.


1 commentaires

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 avoir copié un raccourci dans une action personnalisée à l'aide de la méthode de Brian ...


6 Réponses :


4
votes

"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


2 commentaires

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.



18
votes

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();
    }
}


4 commentaires

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




4
votes

Vous pouvez également essayer!

string allUsers=Environment.GetEnvironmentVariable("ALLUSERSPROFILE")+ "\\Start Menu\\Programs";


0 commentaires

21
votes

in .NET 4 communstartmenu code> a été ajouté au environnement.Specialfolder code> Enum , vous pouvez donc utiliser:

Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu)


3 commentaires

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.



0
votes

de C ++, comme pour le moment d'écriture, Microsoft encourage à utiliser shgekknolderpath avec la valeur souhaitée de connaisfolderid Enum. La valeur que vous devez utiliser est folderid_commmonstartmenu . Dans votre cas, le code ressemblerait à: XXX

Référence de ShgetKnowFolderPath est là:
https://msdn.microsoft .COM / FR-US / Bibliothèque / Windows / Bureau / BB762188 (v = vs.85) .aspx

Référence de toutes les valeurs disponibles de Enum connaisfolderid est Là-bas:
https://msdn.microsoft .com / fr-US / bibliothèque / windows / bureau / dd378457 (v = vs.85) .aspx

info, que le processus d'appel est responsable de la libération des ressources, peut être trouvé dans la documentation de shgekknothladederpath dans la section documentation ppszpath paramètre.

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. folderid_documents ). De plus, si certaines valeurs ne sont pas disponibles si vous utilisez une architecture différente (F.EX. valeur liée à folderid_programfileX64 n'est pas disponible sur le système d'exploitation 32 bits).

Si quelqu'un Est disposé à savoir où Microsoft encourage à utiliser shgekknothfolderpath au lieu d'autres fonctions disponibles, veuillez lire le haut de la documentation de shgetfolderPath .


0 commentaires