2013-03-13 13 views
8

Ho un'applicazione per console che è stata sviluppata per essere chiamata da un software erp.Come faccio a far funzionare un'app per console come amministratore?

Chiamano la mia app all'interno dell'ERP e quando lo fanno, ottengo sempre errori relativi all'autorizzazione insufficiente a farlo.

Ho controllato la casella di controllo "Esegui questo programma come amministratore" nelle proprietà dell'exe per tutti gli utenti ma il risultato è lo stesso.

Ho letto qualcosa sull'aggiunta di un manifest che farà in modo che l'app richieda la finestra di dialogo uac, ma non è quello che voglio perché l'app verrà chiamata da erp sul server e i client non vedranno la finestra di dialogo sul server.

Qualcuno può spiegarmi come rendere questa app per console sempre gestita come amministratore?

+0

Perché questo programma di console richiede i privilegi di amministratore? –

risposta

7

First , capire che ci sarà un dialogo UAC ad un certo punto in questo processo. Non c'è modo di evitarlo. Esistono alcuni approcci che è possibile adottare:

  • Le persone eseguono il software ERP elevato. Lo sto includendo solo per completezza. È orribile dover dare il consenso al prompt UAC ogni volta che si esegue l'app quando di solito non si ha bisogno dei poteri. Sarebbe un test rapido a portata di mano, tuttavia, per confermare che se la tua app è elevata, le cose funzioneranno. Tutto ciò che viene lanciato da un processo elevato è elevato, quindi se la tua app riceve ancora il messaggio di errore, questo non è qualcosa che risolverai aumentando.
  • Modificare il codice nell'app ERP per avviare l'applicazione elevata. Lei parla di C#. L'avvio con il verbo runas è un approccio qui. Ciò pone l'onere dello sviluppatore ERP e potrebbe non essere in grado di farlo.
  • Aggiungi un manifest alla tua app. Puoi incorporarne uno, o se la tua app si chiama foo.exe, crea semplicemente un file foo.exe.manifest con l'appropriato requestExecutionLevel. Per incorporarne uno, usa la pagina Proprietà del tuo progetto C# per scegliere il tipo corretto di manifest. Assicurati di essere lanciato con UseShellExecute impostato su true, altrimenti il ​​manifest verrà ignorato.

Se si sceglie la prima opzione, il prompt UAC sarà ogni volta che l'app ERP viene avviata. Non bene. Se scegli il secondo o il terzo, il prompt UAC sarà ogni volta che l'app della console viene avviata dall'app ERP. Probabilmente accettabile.

Un'altra cosa che potresti considerare è guardare molto più seriamente al motivo per cui l'app della console ha bisogno di privilegi di amministratore. Stai scrivendo alla radice di C o a Program Files? Stai aggiornando una chiave di registro in HKLM? Qualunque cosa tu stia facendo, perché stai facendo così?A meno che la tua app non installi o non configuri qualcosa (nel qual caso ricevere un prompt UAC è buono e corretto) dovresti provare ad adattarlo in modo che scriva alla memoria pre-utente e non abbia bisogno di elevazione. Allora non ti preoccuperai più di come lanciarlo elevato, in ogni caso.

+3

"Un'altra cosa che potresti prendere in considerazione è considerare molto più seriamente il motivo per cui l'app della console richiede i privilegi di amministratore." Ben detto. Questa è esattamente e precisamente la domanda giusta da porre. –

+0

weel sto aggiungendo certificati x 509 all'archivio di Windows, leggendo i certificati dallo store, accedo a un database e mi collego a un webservice esterno. È obbligatorio avere i diritti di amministrazione? – Marco

+0

sto anche usando EventLog.WriteEntry() per registrare errori sul visualizzatore eventi. quindi penso di avere davvero dei diritti di amministratore. destra? – Marco

0

creare un file batch che contiene qualcosa come:

runas /env /user:%USERDOMAIN%\%USERNAME% cmd.exe /K YourProgramName.exe 

Dove% USERDOMAIN% e il% username% sono sostituite dal tuo amministratore dettagli dell'account.

E gestirlo invece?

+0

Che eseguirà l'app come quell'utente ma non eleverà la sessione a quella di un amministratore anche se l'utente ha diritti di amministratore – War

22

Aggiungere nel vostro progetto di applicazione di file manifesto (Add -> New Item -> Generale -> Application File manifesto) e aggiungere il nodo in basso nella app.manifest:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

http://msdn.microsoft.com/en-us/library/windows/desktop/bb756929.aspx

+0

Ottima correzione, grazie – Linef4ult

+0

Questa dovrebbe essere la risposta, molto più semplice e diretta. –

Problemi correlati