2009-10-26 13 views
7

Ich versuche, eine Reihe von Dateien im Ordner programsdata mit grundlegenden MSI-Installer zu installieren. Da der Inhalt der Dateien dynamisch ist und während des Installationsprozesses generiert wird, erstelle ich die Dateien während der Installation in C# -Code.MSI Installer Datei/Ordner Berechtigungen

Die Dateien werden in den entsprechenden Ordnern erstellt, und alles ist gut, außer den Dateien Berechtigungen. Soweit ich weiß, sollen Dateien ihre Berechtigungen vom übergeordneten Ordner übernehmen (falls aktiviert), aber in diesem Fall geschieht dies nicht. Die von mir erstellten Dateien sollten für normale Benutzer schreibbar sein, und ich möchte nicht explizit für jede erstellte Datei Berechtigungen festlegen. Könnte das Problem sein, dass das Installationsprogramm mit unterschiedlichen Berechtigungen ausgeführt wird und daher die Dateien nicht die Berechtigungen von ihren übergeordneten Ordnern erben?

Vielen Dank im Voraus für jede Hilfe.

+0

Ich finde das komisch. Hast du die Berechtigungen nach der Installation überprüft? Dh sie sind nicht nur readonly? –

+0

Ja. Das Problem ist, dass ein Ordner, der während des Installers erstellt wurde, die Standardberechtigungen für den Administrator (oder etwas Ähnliches) erhält. Ich habe die Ordnerberechtigungen manuell festgelegt, damit normale Benutzer schreiben können. Dateien, die im Ordner erstellt werden, erben jedoch nicht die Berechtigungen, die manuell für den Ordner festgelegt wurden (die Datei wird natürlich im Installationsprogramm erstellt, das wahrscheinlich als Administrator ausgeführt wird). Vielleicht ist die Lösung, Berechtigungen für Dateien manuell anzupassen, jedoch finde ich nicht, dass ein guter Ansatz. – Kenneth

Antwort

3

Das Installationsprogramm wird mit Administratorzugriff ausgeführt, wodurch es möglich ist, alles in Programmdateien zu ändern. Ein normaler Benutzer hätte nur Lesezugriff auf den Ordner mit den Programmdateien und den Ordner "ProgramData/Common Application Data".

MSI lock permission table ermöglicht einem Setup-Programm, die Berechtigung eines Ordners nach dem Erstellen in ProgramData/Common Application Data zu ändern. Die Setup-Projekte von Visual Studio unterstützen die MSI-Sperrberechtigungstabelle nicht. Wenn der von Ihnen erstellte Ordner für normale Benutzer in einem Setup-Projekt schreibbar sein soll, müssen Sie das Recht in einer benutzerdefinierten Aktion mit SetNamedSecurityInfo gewähren oder die MSI-Datenbank als Post bearbeiten Schritt bauen. Sie können auch eine MSI-Authoring-Software finden, die mit der MSI-Sperrberechtigungstabelle umgehen kann.

+0

Es geht um den Ordner ProgramData (Vista), ein normaler Benutzer sollte Lese-/Schreibzugriff haben. –

+0

Common ProgramData ist nur für normale Benutzer lesbar, um allen Benutzern R/W zu erteilen, muss das Installationsprogramm die Berechtigung nach dem Erstellen eines Unterordners ändern. –

1

Wenn Sie die Ordnerberechtigungen manuell mit einer benutzerdefinierten Aktion festlegen und die Dateien mit einer anderen benutzerdefinierten Aktion generieren und installieren, kann das Problem durch die Ausführungsreihenfolge verursacht werden.

2

Ich hatte das sehr ähnliche Problem und ich konnte es mit dem Beispiel here lösen.

1

Ich hatte ein ähnliches Problem hier. Das Problem hier ist, dass msi die Dateien mit dem Benutzer SYSTEM erstellt hat. Und während der Laufzeit verwendete die Anwendung den angemeldeten Benutzer (der keine Schreibberechtigung für diese Datei hatte). Was ich getan habe, ist eine neue Datei (wenn nicht vorhanden) während der Initialisierung der Anwendung mit dem vom Installer erstellten erstellen. Dann hat diese Datei die Schreibberechtigung. Es ist keine gute Übung, aber löste mein Problem.