Question

Je possède une ancienne application Windows Forms avec un programme d’installation WiX et elle est installée dans le dossier Program Files comme prévu. L'application héberge des compléments à l'aide du framework System.AddIn .

La structure System.AddIn devant écrire dans certains dossiers de pipeline de complément ( AddIns , AddInSideAdapters , AddInViews , < code> Contrats et HostSideAdapters ) Je ne connais pas le meilleur endroit pour installer les compléments. Je ne peux pas installer dans Program Files car l'utilisateur ne dispose pas de l'autorisation en écriture. Si j'installe dans le dossier Application Data de l'utilisateur, les compléments ne seront pas être installé pour tout autre utilisateur.

Je me rends compte qu'il existe des exigences contradictoires (les utilisateurs ne peuvent pas jouer avec les compléments d'autres utilisateurs, les compléments doivent être installés pour tous les utilisateurs et tous les utilisateurs doivent avoir l'autorisation d'écrire), mais quelle est la meilleure solution pratique itinéraire à prendre?

Il est dommage que les fichiers que le framework System.AddIn doit écrire ne puissent pas être stockés séparément dans Données d'application , mais cela semble être une limitation du framework.

Était-ce utile?

La solution

Je sais que cette question a été posée il y a longtemps, mais ...

Avez-vous essayé Environment.SpecialFolder.CommonApplicationData?

Sous Vista / Windows 7, ce dossier est: % ProgramData% . Je ne suis pas sûr à 100% de ce que c'est dans Windows XP, mais c'est probablement % ALLUSERSPROFILE% .

Dans tous les cas, ce dossier devrait être autorisé à lire / écrire et être identique pour tous les utilisateurs.

N'oubliez pas de créer un sous-dossier pour le nom de votre société / application:

string companyName = "My Company";
string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
string path = Path.Combine(folderPath, companyName);

Autres conseils

J'espère toujours avoir une meilleure réponse, mais je pense que la seule façon de le faire est d'installer le pipeline dans Program Files et de le copier dans Application Data à chaque exécution de l'application. Vous devez ensuite pointer la structure System.AddIn vers la copie de pipeline dans Application Data afin qu’elle tente uniquement d’écrire dans le profil utilisateur.

Euh, vous ne pouvez pas avoir les deux " tous les utilisateurs " et "pas d'élévation". Je ne sais pas exactement ce qu'est le cadre System.AddIn, mais s'il est destiné à être exécuté à partir d'un processus utilisateur (c'est-à-dire: pas un processus similaire à un service système), il doit écrire sous le profil utilisateur (ApplicationDataFolder est un endroit génial). . C'est une règle très fondamentale que toutes les applications doivent suivre. D'après ce que je comprends de vos commentaires, il semble que le cadre System.AddIn enfreigne cette règle.

Mais il me manque probablement quelque chose.

Devez-vous utiliser le programme d'installation WiX? Le déploiement de votre application en tant que solution clickonce place tout le pipeline dans le dossier de données de l'application des utilisateurs. Ainsi, chaque utilisateur peut conserver sa propre liste de modules.

Ceci contournera également la restriction du dossier accessible en écriture.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top