UAC su Win Server 2008 mi ha causato un mal di testa!
-
24-10-2019 - |
Domanda
Il mio programma di installazione distribuisce un exe di configurazione che viene utilizzato per fare qualche configurazione di base su un servizio di Windows che è installato anche. L'exe ha anche bisogno di creare e scrivere alcune chiavi di registro. Su un server di Windows 2008 ambiente non possono essere creati questi tasti. Ho indagato e scoperto che si tratta di un privilegio di amministratore, e l'exe non sta spingendo per le autorizzazioni di amministratore che sono necessari sotto il controllo dell'account utente al 2008. posso lavorare intorno a questo facendo clic destro l'exe e l'esecuzione come amministratore. Questo non è l'ideale ma come un passo in più ho bisogno di informare i nostri clienti di eseguire. Ci sono altri modi di elevare le autorizzazioni di amministratore quando si esegue l'exe?
Soluzione
Mettere un manifesto o con l'exe. Posso dirvi come incorporare il manifesto utilizzando Visual Studio, se me lo faccia sapere quale versione di che si sta utilizzando. Se non stai utilizzando Visual Studio, o non costruire l'exe, allora si può semplicemente mettere il file manifesto nella stessa cartella del file exe e che funzionerà anche. In tal caso, il file deve essere nominato lo stesso del vostro exe, con manifest alla fine, ad esempio per foo.exe essa la foo.exe.manifest. Il contenuto dovrebbe essere simile a questo:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>
Avviso i valori possibili per requestedExecutionLevel sono tutti qui in un commento, e questo usa requireAdministrator. Ora sarà sempre elevare e quindi lavoro per voi.