2012-05-10 3 views
6

Ho un programma che deve creare i file nella directory Documento personale durante l'installazione. Questo è un severo requisito fisso, non è possibile cambiarlo. Il problema è che se l'utente esegue "Esegui come amministratore" sul file di installazione, la costante costante {userdocs} punta alla directory dei documenti dell'amministratore e non all'utente che ha effettuato l'accesso originale.Come scrivere nella directory Documenti dell'utente con il programma di installazione quando l'utente ha utilizzato "Esegui come amministratore"

Così, Googled e trovato questo:

Install files to original user's My Docs folder via Inno Setup on Windows Vista/7

La risposta è sbagliata, però, perché InnoSetup afferma addirittura che

Se un utente avvia il programma di installazione facendo clic destro il suo file EXE e selezionando "Esegui come amministratore", questo flag, purtroppo, non avrà alcun effetto , perché l'installazione non ha la possibilità di eseguire alcun codice con le credenziali dell'utente originale . Lo stesso vale se l'installazione viene avviata da un processo già elevato. Si noti, tuttavia, che questa non è una limitazione specifica per l'installazione Inno ; In questi casi, i programmi di installazione basati su Windows Installer non possono restituire le credenziali dell'utente originale a .

Immagino di poter incoraggiare l'utente a non utilizzare Amministratore Esegui come, ma non so come impedirgli di non arrivare in alto.

Stavo pensando di fare in modo che il programma stesso abbia impostato la directory dei nomi di Documenti \ Programmi al primo avvio (dopo l'installazione). Questo workaround funzionerebbe? Dovrebbe copiare i file dalla sua directory dei file di programma come utente potenzialmente limitato. È possibile o mi imbatterò in problemi di privilegio?

+1

Quali documenti degli utenti possono essere prodotti da un programma di installazione? Il tuo programma di installazione è un word processor? –

risposta

5

La risposta all'originale è valida ma non consigliata. Quando viene eseguita l'installazione, RunAsOriginalUser verrà eseguito come l'utente attualmente connesso a Windows. Questo avviene facendo in modo che parte della configurazione non venga eseguita, quindi esegui un'altra copia elevata per eseguire l'installazione effettiva.

Quando l'utente fa esplicitamente "Esegui come amministratore", anche lo "stub non elaborato" viene eseguito in modo elevato, nel qual caso, non c'è nulla che l'installazione possa fare per accedere all'utente originale poiché tali informazioni sono già state sostituite.

La pratica accettata è eseguire qualsiasi lavoro specifico del profilo nell'applicazione stessa come suggerito, il che significa anche che funzionerà per altri utenti e in un ambiente LUA in pre Vista (dove avresti avuto esattamente la stessa situazione che stai vedendo ora).

0

Questo articolo potrebbe fornire alcune indicazioni su come aggirare l'elevazione,

http://www.codeproject.com/Articles/18946/High-elevation-can-be-bad-for-your-application-How

In generale, ti dà la possibilità di eseguire il file eseguibile (che crea i file in Documenti) presso il fine dell'installazione senza elevazione.

+0

Questo approccio sembra troppo complicato per tentare un'applicazione commerciale. Non saprei da dove cominciare se ci sono problemi. Grazie però, è una soluzione creativa. – hd112

1

In primo luogo, assicurarsi che il programma di installazione non richiede privilegi elevazione da solo, impostando PrivilegesRequired=lowest:

[Setup] 
PrivilegesRequired=lowest 

Per interrompere il programma di installazione, quando il programma di installazione è in esecuzione "come amministratore" in modo esplicito da parte dell'utente, su Windows Vista e anziani, utilizzare IsAdminLoggedOn in InitializeSetup:

[Code] 

function InitializeSetup(): Boolean; 
begin 
    Result := True; 

    if (GetWindowsVersion >= $05010000) and 
    IsAdminLoggedOn then 
    begin 
    MsgBox('Do not run this installer "As Administrator".', mbError, MB_OK); 
    Result := False; 
    end; 
end; 

Per ulteriori discussione sul tema, vedi Install files to original user's My Docs folder via Inno Setup on Windows Vista/7.