2015-10-15 18 views
6

Utilizzando Inno-Setup, ho bisogno che un software installato da un utente amministratore possa essere disinstallato da un utente predefinito.Inno-Setup: Disinstalla senza privilegio di amministratore

Il parametro PrivilegesRequired è più basso, ma il problema rimane.

Ho eseguito test su alcune macchine (tutte sono Windows 7) e su alcune ho potuto disinstallare utilizzando l'utente predefinito, ma ce ne sono stati altri che non mi hanno consentito di disinstallare e richiesto un utente amministratore.

Non ho identificato un modello nel problema e nelle ricerche su Internet.

La cartella di installazione è C: \;

non sto usando sezione [Registro] e tutti i parametri nella sezione [Dirs] Utilizziamo permessi: gli utenti-modificano

+0

Gli amministratori non amministratori non dispongono dei diritti di accesso alla cartella Programmi, quindi se il programma è installato, si sta richiedendo l'impossibile. –

+0

@MarkRansom: questo non dovrebbe essere applicato se l'installazione modifica le autorizzazioni durante l'installazione, vero? –

+0

Ho già effettuato alcuni test e ha funzionato, ma ci sono alcune macchine che non riesco a disinstallare. Il software viene inserito nella directory C. –

risposta

0

Ci sono alcune cose da considerare:

  1. tipicamente , la cartella di installazione è% ProgramFiles% o% ProgramFiles (x86)% che è una cartella che è protetta dal sistema operativo. Per ignorare questa protezione, l'installazione deve modificare le autorizzazioni della cartella di installazione per consentire la rimozione da parte di chiunque.

    Nella sezione [Dirs], è possibile utilizzare Permissions:users-modify (o anche più permissivo se necessario).

  2. simile per la sezione [Registry].

  3. InnoSetup utilizza un file chiamato unins000.exe per la disinstallazione. Questo file include un manifest che richiede il privilegio asInvoker per impostazione predefinita. Per quanto ne so, questo non cambia con l'impostazione PrivilegesRequired. Finora, asInvoker dovrebbe andare bene. Basta tenerlo d'occhio nel caso in cui una nuova versione di InnoSetup lo imposti su qualcosa di più alto.


Per gli altri visitatori trovare questo e non utilizzando InnoSetup:

Se non si incorpora un manifesto nella vostra installazione, Windows userà heuristics for installer detection (Microsoft, .pptx). Se l'euristica determina un risultato positivo, Windows richiederà automaticamente l'elevazione dell'amministratore. Pertanto, utilizzare un manifest e richiedere le autorizzazioni asInvoker.

+1

La cartella di installazione è C: \, non sto usando la sezione [Registry] e tutti i parametri nella sezione [Dirs] stanno usando Permessi: users-modify. –

+0

Ho già fatto alcuni test e ha funzionato, ma ci sono alcune macchine che non posso disinstallare il software, quindi penso che ci sia uno scenario che non sto considerando. –

+0

@RobsonPiernodeJesus: informazioni importanti che è necessario aggiungere alla domanda. –

0

Il programma di disinstallazione di Inno Setup richiede l'elevazione dei privilegi, se il programma di installazione è stato eseguito con privilegi di amministratore o power user (indipendentemente dal fatto che siano stati richiesti esplicitamente con PrivilegesRequired).

Queste informazioni vengono memorizzate nel byte 14C (hex)/322 (decimale) di unins000.dat.

È una maschera di bit in cui il bit 1 (0x01) indica i privilegi di amministratore e il bit 7 (0x40) indica i privilegi di utente avanzato.


Quindi, se è stata installata l'applicazione come utente amministratore/potere, anche se l'installatore ha PrivilegesRequired=lowest il programma di disinstallazione richiedere privilegi elevazione di ottenere le stesse autorizzazioni. Controlla la bandiera in unins000.dat per vedere se è così.

+0

Come posso trovarlo nel file unins000.dat? –

+0

È nella cartella di installazione. –

+0

Sì, ma come posso leggere questo file e trovare queste informazioni? Quando apro con il Blocco note, compaiono alcuni strani caratteri. –