Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Avviare programma come Amministratore (problema)

    Ciao,
    il mio programma deve essere avviato come amministratore, perchè scrive dei file nella sua cartella presi dal web.

    Le guide dicono di modificare l'app.manifest

    codice:
    <!-- Opzioni manifesto Controllo account utente
                Se si desidera modificare il livello di Controllo account utente di Windows, sostituire il 
                nodo requestedExecutionLevel con uno dei seguenti.
    
    
            <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
            <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
            <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
    
    
                Se si specifica il nodo requestedExecutionLevel, la virtualizzazione dei file system e del Registro di sistema verrà disabilitata.
                Se si desidera utilizzare la virtualizzazione dei file e del Registro di sistema per la 
                compatibilità con le versioni precedenti, eliminare il nodo requestedExecutionLevel.
            -->
    Di default vi è: <requestedExecutionLevel level="asInvoker" uiAccess="false" />, deve essere modificato in <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> per avviarlo automaticamente come amministratore.

    Qui nasce il problema, se avvio un nuovo progetto e faccio questa modifica nessun problema, ma nel progetto che ho già iniziato mi da un errore:
    "Errore 1 ClickOnce non supporta il livello di esecuzione richieste 'requireAdministrator'."

    Come posso risolvere, che si avvii in amministratore è una cosa fondamentale per il corretto funzionamento.

    Non mi dite come già fatto di creare installer, cartelle romaing o cose varie, la soluzione deve essere quella di avviare come amministratore come suggerito dall'MSDN https://social.msdn.microsoft.com/Fo...=visualbasicit

    https://www.youtube.com/watch?v=3Tk7AK0DF8k

    Grazie

  2. #2
    Quote Originariamente inviata da Pamela72 Visualizza il messaggio
    ... il mio programma deve essere avviato come amministratore, perchè scrive dei file nella sua cartella presi dal web....
    Ma mi spieghi perché mai non scriverli in una sotto-cartella di Users/PC_User/AppData/Roaming (dove peraltro scrivono moltissimi programmi)? Quale è la controindicazione??

    Scrivere dati nella cartella del programma, da Vista in poi, non ha alcun senso. IMHO. Oltretutto se un programma supernoto mi chiede di essere lanciato come amministratore... bene. Ma se me lo chiede un programma diciamo non universalmente noto... già la cosa mi suonerebbe dubbia: con permessi di amministratore si può scrivere qualsiasi cosa nel registro, ad esempio.
    Ultima modifica di eziogsv; 14-06-2015 a 21:44

  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Probabilmente ClickOnce si scontra con quelle impostazioni.

  4. #4
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Io invece ti suggerirei di installare e scrivere in una cartella tipo c:\ilmioprogramma e lasciar perdere i "deliri" mentali di Microsoft.

    PS c'è qualcuno che riesce a dimostrarmi come queste politiche diciamo così deliranti (almeno dal mio punto di vista) hanno impedito proliferazione di virus e malware? Perchè a me risultano essere più rigogliosi che mai nonostante questi (patetici) tentativi di patchare un blob gigantesco.

    PS2 e sì, lo chiamo blob gigantesco perchè mi sono suzzato le varie versioni della "bibbia" microsoft. Più conosci Windows (internals) peggio ne pensi (dal punto di vista tecnico, non commerciale) , almeno se hai una vaga consuetudine coi sistemi operativi

  5. #5
    Io invece consiglio di seguire quello che viene consigliato e scrivere nei posti giusti... al di là del merito tecnico di una soluzione o dell'altra (e alla fine le cartelle roaming vorrebbero essere un avvicinarsi al modello classico Unix delle cartelle home), in linea di principio conviene non remare contro la piattaforma su cui si sta lavorando; far partire un eseguibile con privilegi amministrativi, specie se scaricato da internet, viene scoraggiato in ogni modo anche solo a livello di GUI, e, come suggeriva eziogsv, l'effetto sull'utente non è simpatico.

    Inoltre, se ti fai dire dal sistema operativo il percorso giusto in cui scrivere sei abbastanza sicuro di non combinare pasticci in caso di configurazioni "strane" (due che mi sono capitate "per davvero": PC aziendali dove l'utente non ha diritti di amministratore; installazioni dove la root del sistema non è c:\ o dove c:\ è la root di un altro sistema - avrei preso a calci nei denti tutti i programmi che hardcodavano c:\windows le volte che mi è capitato).

    Tutto questo vale se è un programma che dovrai distribuire "al pubblico generale" in maniera "facile"; naturalmente se invece è un programma ad uso interno o comunque da installare su macchine di cui puoi controllare la configurazione fai come più ti viene comodo.
    Ultima modifica di MItaly; 15-06-2015 a 10:07
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    ...in linea di principio conviene non remare contro la piattaforma su cui si sta lavorando...
    Questo sarebbe condivisibile, se microsoft non cambiasse idea ogni 3 per 2, tutte le volte che si accorge che i suoi accorgimenti sono inutili o addirittura deleteri.

    Non entro nel merito dell'inutilità pressochè assoluta dello UAC,manifest, firme digitali, smartscreen e così via e dei tentativi di sistemare una situazione ingestibile (oggettivamente) per mantenere la retrocompatibilità, limitandomi a suggerire di leggere e scrivere dentro la cartella da cui viene lanciato il programma.

    Quindi nulla di hardcoded, anzi il contrario, per raggiungere alla portabilità così comoda e così poco nella "microsoft-filosofia".

    Se distribuisci un programma che non richiede installazione, funziona da dentro una cartella e scrive tutto lì dentro puoi usare come installatore... winrar.

    Ti dirò di più: nel caso usa le risorse per linkare file utili (es. DLL) ed estraile nella cartella dell'eseguibile, in modo da avere meno dipendenze possibili (idealmente, nessuna)

    Magari con un check all'avvio della presenza di un collegamento sul desktop, per poi rifarlo se assente (cosa molto utile per il trasferimento tra computer diversi e utonti)

    Il disinstallatore consisterà nel... cancella la cartella.
    Il backup in copia-incolla etc.
    Il trasferisci l'installazione... in copia-incolla.

    Certo non è facilissimo in ambito .NET, comunque questo è solo il mio suggerimento, non la Direttiva Ufficiale Microsoft

  7. #7
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    EDIT: c'è un dettaglio.
    Se il file viene scaricato da Internet mediante una libreria Microsoft c'è caso che lo veda... come un file preso da internet e pertanto particolarmente pericoloso? Non so, può darsi, in questo caso non saprei.

  8. #8
    Allora... sto provando a fare con la cartella di roaming.
    Sembra che funzioni, ma ci sono delle cose che vorrei chiedere.

    In primis: Nome Programma\1.0.0.0 >> quando cambio versione mi creerà una nuova cartella???
    Ultima modifica di Pamela72; 15-06-2015 a 18:18

  9. #9
    Quote Originariamente inviata da Pamela72 Visualizza il messaggio
    ...Nome Programma\1.0.0.0 >> quando cambio versione mi creerà una nuova cartella???
    Si, ma puoi benissimo bypassare il problema immettendoli in una cartella (esempio "Files", che se non c'è dovrà essere creata) direttamente in "NomeProgramma"

    codice:
    ReadOnly Destinazione = _
    (My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData).Replace(Application.ProductVersion, "Files")
    
    'al Load del Form Principale
    If Not My.Computer.FileSystem.DirectoryExists(Destinazione) Then
         My.Computer.FileSystem.CreateDirectory(Destinazione)
    End If
    Ultima modifica di eziogsv; 15-06-2015 a 18:35

  10. #10
    Scusami, ma i file dove li salvo??
    in "My.Computer.FileSystem.SpecialDirectories.Current UserApplicationData" o "Files" oppure "Destinazione"???

    AGGIORNAMENTO:
    Allora, ho fatto un prova: devo salvare il file in Destinazione & "\nomefile.txt". GIUSTO??
    Inoltre ho dovuto modificare ReadOnly Destinazione in Dim Destinazione as string, poichè uno StreamReader non lo accettava. Va bene lo stesso?

    Quote Originariamente inviata da eziogsv Visualizza il messaggio
    Si, ma puoi benissimo bypassare il problema immettendoli in una cartella (esempio "Files", che se non c'è dovrà essere creata) direttamente in "NomeProgramma"

    codice:
    ReadOnly Destinazione = _
    (My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData).Replace(Application.ProductVersion, "Files")
    
    'al Load del Form Principale
    If Not My.Computer.FileSystem.DirectoryExists(Destinazione) Then
         My.Computer.FileSystem.CreateDirectory(Destinazione)
    End If
    Ultima modifica di Pamela72; 18-06-2015 a 17:51

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.