PDA

Visualizza la versione completa : [C++] Eseguire file .exe senza privilegi di amministratore


David88
03-02-2011, 12:57
ciao a tutti!
sto sviluppando un programma in C++ (usando VS2010, Piattaforma Win32),
e purtroppo non funziona se non sono amministratore del computer.
Sapete se esiste un settaggio, una chiamata, un metodo, qualsiasi cosa, per fare in modo che
l'eseguibile .exe sia SEMPRE eseguibile anche senza privilegi di amministrazione?
(anche su altri computer, nel senso che vorrei fosse un settaggio del programma stesso, non del copmuter).

Grazie anticipatamente.

deleted_29
03-02-2011, 13:13
ebbene sì (col manifest) , ma è a titolo oneroso (ossia devi pagare).

ti conviene cercar di capire "cosa fa di hard core" (il programma) che richiede i privilegi, e toglierlo o comunque modificarlo

David88
03-02-2011, 13:15
Bè, ma se ho VS originale? non cambia nulla?

deleted_29
03-02-2011, 13:16
no

alka
03-02-2011, 13:25
Originariamente inviato da David88
sto sviluppando un programma in C++ (usando VS2010, Piattaforma Win32),
e purtroppo non funziona se non sono amministratore del computer.

Cosa intendi con "non funziona"? Cosa accade quando lanci il programma che hai creato?
Ti compare la richiesta dell'UAC di Vista/7?


Originariamente inviato da David88
Sapete se esiste un settaggio, una chiamata, un metodo, qualsiasi cosa, per fare in modo che
l'eseguibile .exe sia SEMPRE eseguibile anche senza privilegi di amministrazione?

Un'applicazione dovrebbe essere normalmente sempre eseguibile senza i privilegi di amministrazione, a meno che - attraverso un "manifest" - non venga stabilito il contrario; ovviamente, se il tuo programma esegue operazioni che richiedono tali privilegi, la chiamata fallisce.

Dovresti chiarire maggiormente alcuni aspetti del problema e del comportamento del programma, oltreché delle sue finalità generali.

Ciao! :ciauz:

David88
03-02-2011, 13:37
Il mio programma è un agente windows, che deve ricevere informazioni da stampanti LOCALI connesse o in usb o in parallelo.
Per le richieste di informazioni manda comandi PJL, che poi vengono letti dalla printer sotto forma di testo, e vengono parserizzati (lavorati). Il tutto viene poi mandato in scrittura ad un file di output *.csv.

Per la comunicazione in parallelo, in più, abbassa lo spooler di stampa, non vorrei che fosse proprio questo il problema, cioè, non è un'azione che normalmente esegue un utente semplice...

E comunque sì, è stato provato su Vista, e bisogna accedere come amministratore, altrimenti dà un'eccezione e non parte neanche.

alka
03-02-2011, 14:37
Originariamente inviato da David88
Per la comunicazione in parallelo, in più, abbassa lo spooler di stampa, non vorrei che fosse proprio questo il problema, cioè, non è un'azione che normalmente esegue un utente semplice...


E' possibile che il problema sia questo. In generale, o esegui il programma accedendo alla macchina con i diritti utente di un amministratore, oppure crei un servizio (a cui puoi associare credenziali specifiche), sempre se il tuo programma è privo di interfacce utente significative che andrebbero portate all'esterno.

David88
03-02-2011, 16:28
ho appena capito il mio errore.
all'interno del codice, ho le chiamate:

system("net stop spooler");

e

system("net start spooler");

E sono proprio queste due chiamate di sistema, ho controllato dall'output, che non ho il permesso di fare.

dove dovrebbe comparire il comando, ho invece "Errore di sistema 5", "Access Denied".

Loading