2012-04-02 10 views
7

Ho scritto un programma Python che distribuisco usando pyinstaller. Sto usando l'opzione onefile finora per creare un eseguibile standalone. È stato bello fino ad ora, ma con l'aumentare della domanda, il tempo di avvio è un po 'lungo. Mi piacerebbe anche che gli utenti installassero l'applicazione correttamente per semplificare l'aggiornamento.Perché il mio pyinstaller creato eseguibile richiede i privilegi di amministratore?

Ho cercato di creare una singola versione di directory dell'app utilizzando l'opzione onedir di pyinstaller. Tuttavia, il file .exe risultante creato richiede i privilegi di amministratore per l'esecuzione, che la versione onefile non ha. Il programma stesso non ha bisogno di tali privilegi quindi presumo che questo sia qualcosa che sta facendo Pyinstaller. Come posso creare un'applicazione che non richiede i privilegi di amministratore?

Ulteriori informazioni:

  • Python 2.6, pyinstaller v1.4
  • applicazione utilizza moduli PyQt4 e pygame.
  • Provare a creare un eseguibile per Windows 7.
  • Utilizzare l'opzione -w pyinstaller per creare un eseguibile senza finestre.
+0

Potrebbe facilmente essere qualcosa che Windows sta facendo. Ha un certo grado di rilevamento automatico dell'installatore e potrebbe contrassegnare il tuo eseguibile come tale.Idealmente, un programma dovrebbe specificare il livello di accesso richiesto nel suo manifest. Non sono sicuro che Pyinstaller ti permetta di fare questo genere di cose. –

risposta

3

Recentemente ho eseguito in questo problema, e la mia esperienza nella risoluzione era così:

PyInstaller con --onefile opzione crea un file manifesto nel 'eseguibile'. Questo file manifest su Windows dice al sistema operativo alcune cose sull'applicazione con cui è in bundle. Una delle cose che specifica è il nome dell'applicazione/file manifest. Il formato del nome file manifest è appname.exe.manifest. Se il programma è congelato con PyInstaller, il nome dell'eseguibile che memorizza nel file manifest sarà il nome assegnato al file EXE completato nella cartella /dist di PyInstaller. SE si rinomina l'EXE, il file manifest imballato con esso non corrisponde più! Pertanto, creare un file manifest con lo stesso nome del file EXE finale ed eseguire PyInstaller con l'opzione --manifest, OPPURE non rinominare l'EXE creato da PyInstaller.

Quando si impacchetta il progetto PyInstaller con l'--manifest personalizzato, il programma rinominato non richiede più l'elevazione dell'amministratore.

1

privilegi di amministratore potrebbe chiedere in pochi casi:

A. se il nome del file eseguibile contiene parole chiave pertinenti (come setup, install, update o patch)

B. l'applicazione lo richiede nel suo manifesto.

C. il nome del file .exe non ha molto il nome nel file manifest.

se si crea un file .spec per il pacchetto di applicazioni, è possibile aggiungere

exe = EXE(
    ... 
    manifest=None, 
    ... 
    ) 

e non sarà chiedere la password, a meno che non si rinomina per l'installazione o l'installazione.

Problemi correlati