2012-04-02 104 views
7

He escrito un programa de Python que distribuyo usando pyinstaller. He estado usando la opción onefile hasta el momento para crear un ejecutable independiente. Eso ha sido genial hasta ahora, pero a medida que la aplicación ha crecido, el tiempo de inicio es un poco largo. También me gustaría que los usuarios instalen la aplicación correctamente para simplificar la actualización.¿Por qué el ejecutable creado de mi pyinstaller requiere privilegios de administrador?

He estado intentando crear una sola versión de directorio de la aplicación usando la opción onedir de pyinstaller. Sin embargo, el archivo .exe resultante que se crea requiere privilegios de administrador para ejecutarse, lo que no ocurrió con la versión onefile. El programa en sí no necesita tales privilegios, así que supongo que esto es algo que está haciendo pyinstaller. ¿Cómo creo una aplicación que no requiere privilegios de administrador?

Otros detalles:

  • Python 2.6, PyInstaller v1.4
  • Aplicación utiliza módulos PyQt4 y pygame.
  • Intentando crear ejecutable para Windows 7.
  • Usando la opción -w pyinstaller para crear un ejecutable sin ventana.
+0

Podría ser algo tan fácil como lo que Windows está haciendo. Tiene cierto grado de autodetección del instalador y podría marcar su ejecutable como tal.Idealmente, un programa debe especificar el nivel de acceso que requiere en su manifiesto. No estoy seguro de si Pyinstaller le permite hacer ese tipo de cosas. –

Respuesta

3

He corrido recientemente en este tema, y ​​mi experiencia en la solución era así:

PyInstaller con --onefile opción crea un archivo de manifiesto en el 'ejecutable'. Este archivo de manifiesto en Windows le dice al sistema operativo algunas cosas sobre la aplicación con la que se incluye. Una de las cosas que especifica, es el nombre de la aplicación/archivo de manifiesto. El formato del nombre de archivo de manifiesto es appname.exe.manifest. Si su programa está congelado con PyInstaller, el nombre ejecutable que almacena en el manifiesto será el nombre dado al archivo EXE completado en la carpeta /dist de PyInstaller. ¡Si cambia el nombre del EXE, el archivo de manifiesto que contiene ya no se corresponde! Por lo tanto, cree un archivo de manifiesto con el mismo nombre que el nombre de archivo EXE final y ejecute PyInstaller con la opción --manifest, O no cambie el nombre del EXE creado por PyInstaller.

Al empaquetar el proyecto PyInstaller con el --manifest personalizado, el programa renombrado ya no solicita la elevación del administrador.

1

privilegios de administrador podría pedir en pocos casos:

A. Si el nombre del ejecutable contiene palabras clave relevantes (como setup, install, update o patch)

B. la aplicación solicita en su manifiesto.

C. el nombre de archivo .exe no tiene mucho el nombre en el archivo de manifiesto.

si crea un archivo .spec para su paquete de solicitud, puede agregar

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

y no va a pedir la contraseña, a menos que cambie el nombre a la configuración o instalar.

Cuestiones relacionadas