Ciao Denis,
Il programma Phyloboite.exe, una volta eseguito, avvia il processo _Phylo00.exe. Posso effettivamente terminare entrambi i processi terminando il processo figlio _Phylo00.exe, sia dal prompt dei comandi che dall'interprete della riga di comando di PyScripter, usando killalltasks. (Per fare ciò, tuttavia, devo passare attraverso il Task Manager, ridurre a icona il processo che, una volta avviato, occupa l'intero schermo e non una finestra, e quindi avviare un prompt dei comandi o PyScripter).
Il problema principale è che l'applicazione portatile che voglio distribuire (Phyloboite.exe) richiede privilegi di amministratore per essere eseguita. Per risolvere questo problema, ho creato una chiave di registro nella funzione install() in modo che tutti gli utenti possano eseguire l'applicazione con privilegi di amministratore e in modalità di compatibilità con Windows XP SP3
Codice: Seleziona tutto
registry_setstring(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers","C:\AppsPortables\Phyloboite\Phyloboite.exe","~ RUNASADMIN WINXPSP3 RUNASINVOKER", type=REG_SZ)
Il problema è che, nonostante ciò, una volta distribuita l'applicazione sulle workstation, è effettivamente necessario aprirla una volta con un account amministratore prima che gli utenti possano avviare l'applicazione con diritti di amministratore.
Per aggirare questo problema di UAC, ho voluto provare ad aprire e poi chiudere l'applicazione durante l'installazione. Dopo diversi tentativi, e a causa dell'inoperatività di `killalltasks` in `install()`, ho creato un file eseguibile (da un file .bat) che esegue questa operazione e viene avviato durante l'installazione (all'interno della funzione `install()`). I test di installazione/disinstallazione con PyScripter non mostrano particolari problemi; l'applicazione si apre per alcuni secondi (3), quindi si chiude e l'installazione si completa. Tuttavia, dopo un test di distribuzione reale con le macchine spente, l'installazione dell'applicazione non si completa e sembra funzionare all'infinito.
Esiste una soluzione al problema di un'applicazione portatile che richiede diritti di amministratore per essere avviata?
ps1: Per tua informazione, il file .bat da cui viene creato il file .exe contiene i seguenti comandi:
Codice: Seleziona tutto
start C:\AppsPortables\Phyloboite\Phyloboite.exe && timeout /t 3 && taskkill /f /im "_Phylo00.exe"
(ps2: un'altra cosa curiosa è che la funzione killalltasks effettivamente uccide il processo _Phylo00.exe in esecuzione durante la disinstallazione quando viene chiamata la funzione uninstall()).
grazie in anticipo