2009-10-26 20 views
7

Sto provando a installare un set di file all'interno della cartella programdata utilizzando il programma di installazione MSI di base. Poiché il contenuto dei file è dinamico e generato durante il processo di installazione, sto creando i file in codice C# durante l'installazione.MSI Installer permessi file/cartella

I file vengono creati nelle cartelle appropriate e tutto è valido, tranne i permessi dei file. Come ho capito, i file dovrebbero ereditare le loro autorizzazioni dalla cartella principale (se abilitata), ma in questo caso, questo non accade. I file che creo dovrebbero essere scrivibili per gli utenti normali e non voglio impostare esplicitamente le autorizzazioni per ogni file creato. Il problema potrebbe essere che il programma di installazione viene eseguito con autorizzazioni diverse e, pertanto, i file non ereditano le autorizzazioni dalle cartelle principali?

Grazie in anticipo per qualsiasi aiuto.

+0

Lo trovo strano. Hai controllato le autorizzazioni dopo l'installazione? Cioè non sono solo di sola lettura? –

+0

Sì. Il problema è che una cartella creata durante l'installazione ottiene le autorizzazioni predefinite per l'amministratore (o qualcosa del genere). Ho impostato manualmente le autorizzazioni della cartella, consentendo agli utenti regolari di scrivere. Ma i file creati nella cartella non ereditano le autorizzazioni impostate manualmente sulla cartella (ovviamente, il file viene creato nel programma di installazione, che probabilmente viene eseguito come amministratore). Forse la soluzione è regolare le autorizzazioni sui file manualmente, tuttavia, non trovo che un buon approccio. – Kenneth

risposta

3

il programma di installazione viene eseguito con accesso di amministratore, che consente di modificare qualsiasi cosa nei file di programma. Un utente normale avrebbe letto solo l'accesso alla cartella dei file di programma e alla cartella ProgramData/Common Application Data.

MSI lock permission table consente a un programma di installazione di modificare l'autorizzazione di una cartella dopo la creazione in ProgramData/Dati applicazioni comuni. I progetti di installazione di Visual Studio non supportano la tabella dei permessi di blocco di MSI, quindi se hai bisogno della cartella creata per essere scrivibile per gli utenti normali in un progetto di installazione devi concedere il diritto in un'azione personalizzata usando SetNamedSecurityInfo o modificare il database MSI come post costruire passo. È inoltre possibile trovare un software di authoring MSI in grado di gestire la tabella dei permessi di blocco di MSI.

+0

Riguarda la cartella ProgramData (Vista), un utente normale dovrebbe avere accesso in lettura/scrittura. –

+0

Common Program Data viene letto solo agli utenti normali, per garantire l'R/W a tutti gli utenti il ​​programma di installazione deve modificare l'autorizzazione dopo aver creato una sottocartella. –

1

Se si impostano manualmente le autorizzazioni della cartella con un'azione personalizzata e si generano e installano i file con un'altra azione personalizzata, il problema potrebbe essere causato dall'ordine di esecuzione.

2

Ho avuto il problema molto simile e sono stato in grado di risolverlo utilizzando l'esempio here.

1

Ho avuto un problema simile qui. Il problema qui è che msi stava creando i file con l'utente SYSTEM. E l'applicazione durante il runtime stava usando l'utente registrato (che non aveva il permesso di scrittura su questo file). Quello che ho fatto è creare un nuovo file (se non esiste) durante l'inizializzazione dell'applicazione con quello creato dal programma di installazione. Quindi questo file avrà il permesso di scrittura. Non è una buona pratica, ma ho risolto il mio problema.