2009-10-26 9 views
7

J'essaie d'installer un ensemble de fichiers dans le dossier programdata à l'aide du programme d'installation MSI de base. Comme le contenu des fichiers est dynamique et généré au cours du processus d'installation, je crée les fichiers en code C# lors de l'installation.Autorisations de fichier/dossier d'installation MSI

Les fichiers sont créés dans les dossiers appropriés, et tout est bon, à l'exception des autorisations de fichiers. Si je comprends bien, les fichiers sont supposés hériter leurs autorisations du dossier parent (si activé), mais dans ce cas, cela n'arrive pas. Les fichiers que je crée devraient être accessibles en écriture pour les utilisateurs réguliers, et je ne veux pas définir explicitement les permissions pour chaque fichier créé. Le problème peut-il être que le programme d'installation s'exécute avec des autorisations différentes, et par conséquent les fichiers n'hérite pas des autorisations de leurs dossiers parents?

Merci d'avance pour toute aide.

+0

Je trouve cela étrange. Avez-vous vérifié les permissions après l'installation? C'est à dire qu'ils ne sont pas seulement en lecture seule? –

+0

Oui. Le problème est qu'un dossier créé pendant le programme d'installation obtient les permissions par défaut pour l'administrateur (ou quelque chose comme ça). J'ai placé les permissions de dossier manuellement, permettant aux utilisateurs réguliers d'écrire. Mais les fichiers créés dans le dossier n'héritent pas des autorisations définies manuellement sur le dossier (bien sûr, le fichier est créé dans le programme d'installation, qui fonctionne probablement en tant qu'administrateur). Peut-être que la solution consiste à ajuster les permissions sur les fichiers manuellement, cependant, je ne trouve pas cela une bonne approche. – Kenneth

Répondre

3

le programme d'installation s'exécute avec un accès administrateur, ce qui lui permettrait de modifier n'importe quoi dans les fichiers programme. Un utilisateur normal aurait un accès en lecture seule au dossier des fichiers programme et au dossier ProgramData/Common Application Data.

Le programme lock permission table de MSI permet à un programme d'installation de modifier l'autorisation d'un dossier après la création dans ProgramData/Common Application Data. Les projets d'installation de Visual Studio ne prennent pas en charge la table d'autorisation de verrouillage de MSI. Par conséquent, si vous avez besoin du dossier créé pour être accessible aux utilisateurs normaux dans un projet d'installation, vous devez accorder le droit dans une action personnalisée en utilisant SetNamedSecurityInfo ou modifier la base de données MSI. étape de construction. Vous pouvez également trouver un logiciel de création MSI qui peut gérer la table d'autorisation de verrouillage de MSI.

+0

Il s'agit du dossier ProgramData (Vista), un utilisateur normal devrait y avoir un accès en lecture/écriture. –

+0

Common ProgramData est en lecture seule pour les utilisateurs normaux, pour accorder R/W à tous les utilisateurs le programme d'installation doit modifier l'autorisation après la création d'un sous-dossier. –

1

Si vous définissez les autorisations de dossier manuellement avec une action personnalisée et générez et installez les fichiers avec une autre action personnalisée, le problème peut être dû à l'ordre d'exécution.

2

J'ai eu le problème très similaire et j'ai pu le résoudre en utilisant l'exemple here.

1

J'ai rencontré un problème similaire ici. Le problème ici est que msi créait les fichiers avec l'utilisateur SYSTEM. Et l'application pendant l'exécution utilisait l'utilisateur connecté (qui n'avait pas d'autorisation d'écriture sur ce fichier). Ce que j'ai fait est de créer un nouveau fichier (s'il n'existe pas) lors de l'initialisation de l'application avec celui créé par le programme d'installation. Alors ce fichier aura l'autorisation d'écriture. Ce n'est pas une bonne pratique mais j'ai résolu mon problème.