Domanda

Ho un servizio Windows che aggiorna il nostro prodotto. Copia i file del prodotto in una directory temporanea, di solito "C: \ Windows \ Temp", corregge i file binari, quindi usa MoveFileEx per copiare i file nella directory di installazione al riavvio, di solito "C: \ Programmi \ Product " ;. I file nella directory di installazione ereditano i loro attributi di sicurezza dalla cartella principale. Dopo la copia, patch e riavvio, i file nella directory di installazione mancano alcuni ACL. In particolare, i file non hanno più l'ACL per il gruppo Users, quindi gli utenti non possono più eseguire il programma dopo il riavvio.

Qualcuno può spiegare cosa sta succedendo qui? Sembra che copiando dalla directory di installazione alla directory temporanea, i file ereditino gli ACL della directory temporanea. Su MoveFileEx / Reboot, tuttavia, i file ereditano solo gli ACL che hanno in comune sia la directory di installazione che quella temporanea.

È stato utile?

Soluzione

In Windows se si copia un file, il file assume gli ACL della directory di destinazione. Se sposti un file, l'ACL ne sostituisce uno che potrebbe ereditare da quella directory. Non sono sicuro di come MoveFileEx potrebbe funzionare in modo diverso su un file.

La directory temporanea si trova di solito sotto il profilo utente (sia% TMP% che% TEMP% di solito puntano qui) quindi la copia dei file qui avrà le autorizzazioni per quell'utente. Lo spostamento di tali file nella directory dei file di programma richiederà solo i diritti degli utenti e quindi eseguibile solo dall'utente che esegue l'installazione.

Altri suggerimenti

Una potenziale soluzione alternativa è quella di patchare copie dei file con-nella stessa directory ma con nomi diversi. Dopo il riavvio, è possibile scambiare le versioni con patch. In alternativa, eseguire prima un riavvio, quindi correggerle sul posto e eseguirne il backup nella directory temporanea nel caso in cui sia necessario un rollback manuale.

Se vuoi davvero spostarli in una posizione diversa, la creazione di una cartella temporanea nello stesso posto dei file da patchare aiuterebbe le autorizzazioni a rimanere invariate supponendo che la directory stia usando le autorizzazioni ereditate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top